# przejscie na nowe gcc 3.4.4

## uho

witam,

pojawila sie informacja o nowym gcc, co wiaze sie z emerge -e system i world (jest krotszy sposob przejscia ale mniej bezpieczny)

czy koniecznie musze przechodzic na nowsza wersje gcc ?

czy pozostanie przy starszym gcc moze miec w przyszlosci jakies konsekwencje ?

mam kilka maszyn z gentoo, dostep tylko zdalny i nie zabardzo mi sie widzi przekompilowywanie calego systemu, nie jestem melomanem dobierania flag do kompilacji

----------

## n3rd

Myślę, że nie musisz się śpieszyć  :Wink:  Są programy które źle lub wcale nie działają, gdy są skompilowane gcc 3.4.4 (np. elmo).

----------

## BeteNoire

Elmo to nierozwijany już staroć. Dlatego źle działa z gcc 3.4.4.

Mam ACCEPT_KEYWORDS="~x86" a więc najnowszy soft, w tym gcc 3.4.4 - wszystko działa bez problemu.

----------

## n3rd

 *BeteNoire wrote:*   

> Elmo to nierozwijany już staroć.

 Tym "starociem" odbieram i wysyłam pocztę i jestem z niego bardzo zadowolony  :Wink: 

Pozdrawiam

daniel cegielka

----------

## Xax

Zainstalowanie i przejscie na gcc-3.4.4 nie zmusza Cie do wykonania emerge -e system (czy tez world). Wszystko bedzie nadal dzialac jak nalezy. Pamietac musisz, ze kernel oraz wszystkie moduly do niego musza byc kompilowane ta sama wersja gcc.

Gdy zainstalujesz nowe gcc zauwazysz pewnie, iz jego poprzednia wersja nie zostala automatycznie odinstalowana. Jezeli chcesz sie jej pozbyc to musisz to zrobic recznie. Ale tutaj ostroznie, wiele aplikacji jest uzaleznionych od bibliotek tej wersji gcc, ktora byly kompilowane. Instalacja nowej wersji nie zmienia automatycznie tych zaleznosci, trzeba to zrobic samemu.

Po pierwsze trzeba uruchomic fix_libtool_files.sh i podac jako parametr poprzednio wersje gcc. Jezeli miales gcc-3.3.6 to wystarczy odpalic to tak:

```
fix_libtool_files.sh 3.3.6
```

Po drugie, trzeba przekompilowac jeszcze raz wszystkie programy, ktore sa uzaleznione od libstdc++.so.5 (jezeli miales gcc-3.3.6). Nalezy do nich min python. Wywalenie starej wersji gcc przed ta operacja calkowicie go uziemia, co sprawia, ze takie emerge przestaje dzialac  :Smile: 

Na szczescie istnieje magiczne polecenie, ktore wylapaniem i przekompilowaniem takich programow i bibliotek zajmie sie samo, musisz go tylko odpalic.

```
revdep-rebuild --library libstdc++.so.5
```

Zarowno fix_libtool_files.sh oraz revdep-rebuild musza zostac odpalone po zmianie kompilatora na nowsza wersje, czego, jezeli nie stanie sie to automatycznie po instalacji, dokonuje sie przy pomocy gcc-config.

Z drugiej strony mozesz zostawic w systemie gcc-3.3.6, nic sie nie stanie, bedziesz mial dwa kompilatory.

No i na koniec drobna uwaga, gcc ma krytyczne znaczenie dla systemu o czym sie zreszta dowiesz starajac sie go usunac. Operacje wywalenia gcc podejmujesz na wlasne ryzyko. Ja dotychczas nie mialem z tym problemu, ale warto wiedziec co sie z tym moze wiazac jezeli cos sknocisz   :Wink: 

----------

## BeteNoire

Mam dwa kompilatory - jak sprawdzić co mam czym w systemie skompilowane?   :Twisted Evil: 

Nie chodzi mi o aktualny profil bo to wiem:

```
gcc-config -c

i686-pc-linux-gnu-3.4.4
```

Ale może się tak zdarzyć, że po emerge -e world mam coś jednym a coś innym kompilatorem zrobione?

----------

## Xax

Moze sie zdazyc. Wystarczy ze masz w systemie programy ktore nie sa ujete w /var/lib/portage/world i nie sa one zaleznoscia zadnego innego programu.

----------

## indianiec

Jest już przewodnik migracji: http://www.gentoo.org/proj/en/base/x86/gcc-upgrading-guide.xml

----------

## mrto

Próbowałem przejśc na 3.4.4 w ten weekend. Niestety podczas emergowania gcc 3.4.4 automatycznie ustawia się on jako domyślny (a nie powinien). Gorzej że podczas emerge -e system merguje sie gcc 3.3.6 który też automatycznie ustawia się na domyślny kompilator.

```
# emerge -e system && emerge -e world
```

wywaliło się na lirc który jest w world, więc teraz nie wiem które programy mam skompilowane 3.3.6 a które 3.4.4  :Sad: . Na logikę było tak:

emerge gcc - ustawia się 3.4.4 jako domyślny.

emerge -e system - kompiluje się 3.4.4 do momentu kiedy następuje gcc 3.3.6 który zmienia się na domyslny, i reszta kompiluje sie już 3.3.6.

emerge -e world - kompiluje sie 3.3.6 - do momentu kiedy następuje 3.4.4 (zmienia sie na domyślny) poźniej merguje sie 3.3.6 ( zmienia sie na domyslny) i kompiluje world do momentu kiedy natrafia na lirc (który wywala się z powodów innych  :Smile: ).

Po całonocnej kompilacji siadam do kompa i gcc-config pokazuje że domyślnym kopmilatorem jest gcc-3.3.6.

Na razie nie mam cierpliwości i czasu,  żeby do próbować tego jeszcze raz.

Pozdrawiam.

----------

## DesGen

Witam 

Faktycznie jest taki numer, że emerge -e system,  rekompiluje  gcc 3.3.6  i  ustawia go jako defaultowy, ale można to łatwo rozwiązać po przez przerwanie kompilacji gcc 3.3.6 a następnie wydanie polecenia 'emerge --resume --skipfirst',  które pominie  pierwszy pakiet czyli w tym wypadku gcc 3.3.6 i radośnie poleci dalej. Manewr ten jest opisany tu http://www.gentoo.org/proj/en/base/x86/gcc-upgrading-guide.xml

Pozdrawiam

----------

## Xax

Problem z dublowaniem sie gcc mozesz rozwiazac w sumie na dwa sposoby. Albo wywalisz stare gcc (jak pisalem, ostroznie z tym jednak jest to do zrobienia) lub tez podzielisz emerge -e world na etapy. Jak to zrobic znajdziesz na forum przez wyszukiwarke. Trik polega na wylistowaniu pakietow, ktore emerge -e chce zemergowac i zapisaniu ich do pliku. Potem sie je instaluje skryptem, ktory je wyluskuje z owego pliku. Wystarczy przed puszczeniem skryptu wywalic gcc-3.6.6 z pliku z lista pakietow i teoretycznie powinno byc po bolu  :Wink: 

Milej zabawy.

----------

## BeteNoire

Nie rozumiem jednej rzeczy. Gdy próbuję użyć opcji --prune, emerge próbuje usunąć mi nowsze gcc a chroni starsze:

```
sys-devel/gcc

    selected: 3.4.4-r1

   protected: 3.3.6

     omitted: none
```

Przy czym, jak wyżej napisałem, gcc-config -c pokazuje: i686-pc-linux-gnu-3.4.4.

O co biega?

----------

## Xax

Nie wiem o co biega, u mnie chce wywalic obie wersje, wiec pewnie masz gdzies cos ustawione, nie dotarlem jeszcze do tego  :Wink: 

```
emerge -Cp =gcc-3.6.6
```

rozwiaze problem (bez p to wiadomo, zegnaj gcc-3.3.6)

----------

## uho

dzieki za podpowiedzi odnosnie aktualizacji gcc, ale jednak mnie bardziej interesuje pozostanie przy starszej wersji i jeszcze raz sie zapytam:

 *uho wrote:*   

> czy koniecznie musze przechodzic na nowsza wersje gcc ?
> 
> czy pozostanie przy starszym gcc moze miec w przyszlosci jakies konsekwencje ?

 

----------

## Xax

Nikt Ci nie kaze i nic sie zlego nie stanie. Jezeli nie chcesz, aby system podczas jakiegos updatu installowal nowsza wersje gcc mozesz zamaskowac wszystkie nowsze od gcc-3.3.6 w /etc/portage/package.mask

Jezeli zdazy sie, ze jakis program bedzie jednak wymagal nowszego gcc (a nie wiem czy sie tak moze zdazyc) wowczas emerge sie wylozy z radosnym info, ze nie moze znalezc gcc-*.*.*. Wowczas wystarczy wywalic wpis z wyzej wymienionego pliku.

----------

## YANOUSHek

 *Xax wrote:*   

> [...] Jezeli zdazy sie, ze jakis program bedzie jednak wymagal nowszego gcc (a nie wiem czy sie tak moze zdazyc) [...]

 Oczywiście, że tak się może zdarzyć. W końcu nowe wersje kompilatorów zazwyczaj posiadają jakąś nową funkcjonalność (np.: tablice dynamiczne w C - int N = 50; int T[N];) kiedyś tego nie było. Może się okazać, że jakiś program będzie z tego korzystał, a wtedy stare gcc sobie nie poradzi i wywali jakiś głupi błąd kompilacji. Obecne gcc pewnie także obsługuje coś nowego (oczywiście mogę się mylić).

----------

## Xax

Co nie zmienia faktu, ze dopoki jakis pakiet nie bedzie uzalezniony od jakiegos super nowego gcc to moze korzystac z tego co ma. Gorzej jezeli ta zaleznosc nie bedzie jawnie okreslona i faktycznie kompilator bedzie sie wykladal z niewiadomych powodow  :Smile: 

----------

## Miki

a czy mozna przeprowadzic ta aktualizacje jakos 'na raty'?? tzn. zeby nie kompilowac wszystkiego za jednym zamachem, gdyz mam troche wolny CPU (600mHz) i obawiam sie, ze moze to troche potrwac^^

----------

## Xax

Jezeli chodzi Ci o emerge -e world (lub system) to mozna, poszukaj na tym forum, jest gdzies o tym, widzialem nie tak dawno ale jestem zdziebko rozleniwiony dzisiaj wiec nie poszukam   :Cool: 

----------

## Miki

szukam i szukam, ale znalezc nie moge... moze jakas mala podpowiedz??^^ bede wdzieczny

----------

## Xax

Podpowiedz: "na raty"   :Wink: 

Wynik:

https://forums.gentoo.org/viewtopic-t-191167.html

https://forums.gentoo.org/viewtopic-t-226935.html

https://forums.gentoo.org/viewtopic-t-278435.html

https://forums.gentoo.org/viewtopic-t-398419.html

Milego kombinowania.

----------

## lazy_bum

 *DesGen wrote:*   

> Faktycznie jest taki numer, że emerge -e system,  rekompiluje  gcc 3.3.6  i  ustawia go jako defaultowy, ale można to łatwo rozwiązać po przez przerwanie kompilacji gcc 3.3.6 a następnie wydanie polecenia 'emerge --resume --skipfirst',  które pominie  pierwszy pakiet czyli w tym wypadku gcc 3.3.6 i radośnie poleci dalej. Manewr ten jest opisany tu http://www.gentoo.org/proj/en/base/x86/gcc-upgrading-guide.xml

 

Niby jest. Zapuściłem "-e system" na noc, potem doczytałem i stwierdziłem, że straciłem noc bo i tak mi kompiluje pod 3.3.6. Z drugiej strony po tej auto-zmianie:

```
~ # gcc-config -c

i686-pc-linux-gnu-3.4.4
```

.. to jak jest z tym automagicznym powrotem gcc do 3.3.6?!  \-:

----------

## Robert W.

 *lazy_bum wrote:*   

> Zapuściłem "-e system" na noc, potem doczytałem i stwierdziłem, że straciłem noc bo i tak mi kompiluje pod 3.3.6.

 

A:

```
emerge -P gcc
```

 u was działa?

Ja w ten sposób pozbyłem się gcc-3.3.6.

----------

## lazy_bum

 *mrto wrote:*   

> Na logikę było tak:
> 
> emerge gcc - ustawia się 3.4.4 jako domyślny.
> 
> emerge -e system - kompiluje się 3.4.4 do momentu kiedy następuje gcc 3.3.6 który zmienia się na domyslny, i reszta kompiluje sie już 3.3.6.

 

Czyli na moją logikę jest tak:

```
emerge gcc

gcc-config i686-pc-linux-gnu-3.4.4

source /etc/profile

emerge --oneshot sys-libs/libstdc++-v3

emerge -e system
```

.. i w którymś momencie..

```
emerge gcc-3.3.6

(...)

Switching native-compiler to i686-pc-linux-gnu-3.3.6   [ok]
```

.. i wszystko dalej leci z 3.4.4, bo czy przypadkiem nie trzeba zrobić...

```
source /etc/profile
```

.. żeby zmienić "w danej sesji" na 3.3.6? (ja już się zgubiłem ;-)

 *Robert W. wrote:*   

> 
> 
> ```
> emerge -P gcc
> ```
> ...

 

U mnie chciało wywalić 3.3.6, czyli wszystko tak jak powinno być.

----------

## mrto

 *lazy_bum wrote:*   

> 
> 
> ```
> emerge gcc
> 
> ...

 

Wszystko powinno być ok. W pierwszej wersji sposób ten wygladał tak:

```
emerge gcc

gcc-config i686-pc-linux-gnu-3.4.4

source /etc/profile

emerge -e system

emerge -e world

emerge --oneshot sys-libs/libstdc++-v3
```

ktos zauważył że to bug i poprawiono to przestawiając:

```
emerge --oneshot sys-libs/libstdc++-v3
```

przed emerge -e system. Opisane jest to w najnowszym newsletterze.

Jeżeli po całej operacji gcc-3.4.4 jest domyślnym to najprawdopodobniej wszystko jest ok.

Edit: tu jest ten bug.

----------

## indianiec

Mam takie pytanie: postanowiłem przejść na gcc-3.4.4, ale zgodnie z pierwszym, skróconym sposobem opisanym w podręczniku migracji, bo nie uśmiecha mi się przekompilowanie przy pomocy emerge -e world ponad 1,5 GB na athlonie 1000. Wykonałem więc polecenie: 

```
revdep-rebuild --library libstdc++.so.5 -- -p -v
```

Wyświetliło problem z kilkoma pakietami, których już nie ma w portage, ale które okazały się jakimiś zapomnianymi programami i których mogłem się pozbyć (emerge -C *).

Jeszcze raz wydałem polecenie: 

```
revdep-rebuild --library libstdc++.so.5 -- -p -v
```

i wynik jest taki:

```
There are no dynamic links to libstdc++.so.5... All done.
```

Czyżbym rzeczywiście nie musiał przepudowywać żadnego pakietu? Czy też moje gentoo zmierza w kierunku zagałady?

----------

## Xax

Jezeli przebudowales juz pakiety zalezne od libstdc++.so.5 oraz wywaliles te pakiety ktorych sie nie dalo bo takowych nie ma i je wywaliles to faktycznie nie musisz, bo nie ma czego przebudowywac.

PS quickpkg =stara_wersja_gcc na wszelki wypadek nie zaszkodzi  :Wink: 

----------

## indianiec

No właśnie nie przepudowałem żadnego pakietu, bo po ręcznym odinstalowaniu śmieci okazało się, że:

```
There are no dynamic links to libstdc++.so.5... All done.
```

----------

## Xax

Zobacz czy ls -l /root/.revdep* listuje jakies pliki, jezeli tak to je usun i zaposc jeszcze raz revdep'a.

Pytanie jaki jest odstep czasu pomiedzy zainstalowaniem nowszej wersji gcc i postanowieniem ze stara sie usunie ? Byc moze na tyle duzy, ze w tym czasie pythona juz przeinstalowales na nowym gcc a wtedy nie trzeba go przebudowywac.

Upewnij sie tez, ze uzywany kompilator to faktycznie ten nowszy, a nie przypadkiem stary (gcc-config -c). Bo wtedy to tez nie ma co przebudowywac  :Wink: 

Najbardziej krytyczny w przypadku libstdc++.so.* jest wlasnie python, ktorego awaria to powazny problem dla systemu (np nie dziala emerge).

----------

## indianiec

W takim razie poprostu zostawię stare gcc. Jak coś wyniknie niespodziwanego, to będę się martił. Na razie wszystko wydaję się być ok, domyślną werją gcc jest 3.4.4. Dzięki za wyjaśnienia.

----------

## gryhild1985

A mi się wykopyrtną proces instalacji  :Sad: 

hmmm...

```

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:38:16: gc.h: No such file or directory

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:42: error: parse error before "word"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:42: warning: type defaults to `int' in declaration of `word'

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:42: warning: data definition has no type or storage class

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:43: error: parse error before "signed_word"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:43: warning: type defaults to `int' in declaration of `signed_word'

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:43: warning: data definition has no type or storage class

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:46:22: gc_typed.h: No such file or directory

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:60: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:60: warning: function declaration isn't a prototype

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:62: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:62: warning: function declaration isn't a prototype

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:66: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:67: warning: function declaration isn't a prototype

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: In function `__objc_gc_setup_array':

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:68: error: `type' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:68: error: (Each undeclared identifier is reported only once

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:68: error: for each function it appears in.)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:76: error: `mask' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:76: error: `offset' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: At top level:

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:95: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:96: warning: function declaration isn't a prototype

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: In function `__objc_gc_setup_struct':

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:101: error: `type' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:123: error: `offset' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:133: warning: implicit declaration of function `GC_set_bit'

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:133: error: `mask' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: At top level:

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:155: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:156: warning: function declaration isn't a prototype

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: In function `__objc_gc_setup_union':

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:163: error: `type' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:172: error: `offset' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:172: warning: type defaults to `int' in declaration of `__v'

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:175: error: `mask' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: At top level:

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:184: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:185: warning: function declaration isn't a prototype

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: In function `__objc_gc_type_description_from_type':

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:190: error: `type' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:218: error: `mask' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c: In function `__objc_generate_gc_type_description':

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:291: error: `GC_bitmap' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:291: error: parse error before "mask"

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:308: error: `mask' undeclared (first use in this function)

/var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/libobjc/gc.c:336: warning: implicit declaration of function `GC_make_descriptor'

make[2]: *** [gc_gc.lo] Error 1

make[2]: Leaving directory `/var/tmp/portage/gcc-3.4.4-r1/work/build/i686-pc-linux-gnu/libobjc'

make[1]: *** [all-target-libobjc] Error 2

make[1]: Leaving directory `/var/tmp/portage/gcc-3.4.4-r1/work/build'

make: *** [profiledbootstrap] Error 2

!!! ERROR: sys-devel/gcc-3.4.4-r1 failed.

!!! Function gcc_do_make, Line 1312, Exitcode 2

!!! emake failed with profiledbootstrap

!!! If you need support, post the topmost build error, NOT this status message.

localhost ~ # 

```

Czy ja kiedyś coś zainstaluję bez jakiś dziwnych przejść ? :>

Macie jakieś pomysły co do tego ?

----------

## Gogiel

Na koncu 

```
revdep-rebuild --library libstdc++.so.5 -- -p -v
```

 wywala mi:

```
hese are the packages that I would merge, in order:

Calculating dependencies |

emerge: there are no ebuilds to satisfy "=dev-java/blackdown-jdk-1.4.1".

Result is not OK, you have following choices:

- if emerge failed during build, fix the problems and re-run revdep-rebuild

    or

- use -X or --package-names as first argument (try to rebuild package, not exac

  ebuild - ignores SLOT!)

    or

- set ACCEPT_KEYWORDS="~<your platform>" and/or /etc/portage/package.unmask

  (and remove /root/.revdep-rebuild_fb248503.5_order to be evaluated again)

    or

- modify the above emerge command and run it manually

    or

- compile or unmerge unsatisfied packages manually, remove temporary files and

  try again (you can edit package/ebuild list first)

To remove temporary files, please run:

rm /root/.revdep-rebuild*.?_*

```

Jezeli wywale dev-java/blackdown-jdk z /root/.revdep-rebuild_fb248503.5_order to wywala mi blad z jakas inna paczka.

Czy mam teraz kontynuowac 

```
emerge --oneshot sys-libs/libstdc++-v3
```

 ?

----------

## Xax

gryhild1985

Sproboj skompilowac gcc bez flag objc i objc-gc.

Gogiel

Emerge proboje zainstalowac konkretna wersje blackdown-jdk, ktorej juz nie ma w portage. revdep-rebiuld stara sie przebudowac dokladnie te same wersje ktore masz w systemie, nie robi updatu. Zatem mozesz to zrobic za niego po czym jeszcze raz puscic revdep-rebiuld.

```
emerge --oneshot sys-libs/libstdc++-v3
```

W sumie to mozesz, tylko pamietaj o tym ze opcja --oneshot nie dodaje pakietu do pliku world. Zatem przyszlosciowy update przez emerge -u world jej nie uwzgledni, chyba ze wyniknie z jakiejs zaleznosci.

----------

## Gogiel

 *Xax wrote:*   

> gryhild1985
> 
> Sproboj skompilowac gcc bez flag objc i objc-gc.
> 
> Gogiel
> ...

 

No to uzyc jej czy nie? Bo revdep-rebuild automatycznie ja wlacza.

----------

## Xax

```
man emerge
```

--oneshot robi dokladnie to co napisalem, nie dodaje pakietu do pliku world. Revdep przebuduje programy, ktore masz zainstalowane i ktorych dowiazania do bibliotek zostaly uwalone w taki czy inny sposob (tutaj do konkretnej biblioteki). Dodaje ta opcje sam od siebie chocby dlatego, ze byc moze Ty nie chcesz aby jakas paczka byla w world, oneshot to gwarantuje, a jezeli juz tam jest to nic zlego sie przeciez nie stanie  :Wink: 

----------

## gryhild1985

gcc się zainstalowało, więc lecimy dalej  :Smile: 

----------

## Gabrys

Ja się dorzucę to tej bazy informacji. Zrobiłem to całe przekompilowywanie pakietu mocno na raty (z tydzień się robiło, a ściągało się ponad 1GB źródeł).

robiłem wg migration-guide nie wiem z kiedy, ale mam nadzieję, że nie przekompilował mi połowy systemu z jednym GCC a drugiej połowy z drugim  :Neutral: . Mój sposób robienia emerge -e world był taki:

emerge -e world -pv | skrypt w bashu, gawku, sedzie i paru innych rzeczach > emerge.lista

w ten sposób w pliku emerge.lista dostałem nazwy wszystkich pakietów, w kolejności wypisanej przez emerge -e world

a następnie

cat emerge.lista | xargs emerge

i robił po kolei aż się wywalił. Wywalał się z 5 (może 7) razy na różnistych pakietach. Wtedy sprawdzałem na czym konkretnie, vim emerge lista, szukaj tej paczki, dgg, i wio dalej:

cat emerge.list | xargs emerge

po paru nocach się przekompilował.  :Very Happy: 

Dodam, że w pewnym momencie miałem wielkie problemy z KDE i Fx. KDE się odpalał ale parę razy na sekundę wywalał komunikat, że soundserver się wysypuje (oczywiście nie pomagało wyłączenie w cholerę systemu dźwięku). Fx się odpalał z minutę i zaraz craszował, także sobie na czas kompilacji posiedziałem trochę na IceWM i poużywałem Opery. Innych problemów nie zauważyłem.

Jednym z pakietów, które nie chciały mi się zainstalować to OO.o (na pewno NIE z powodu małej ilości miejsca), jednak zostawiłem go przekompilowanego GCC 3.3 i szczęśliwie nadal działa, także nie narzekam.

PS. emerge --resume to nie jest dobry pomysł (przynajmniej dla mnie), bo jak w międzyczasie kompilujesz coś jeszcze z emerge'a, to się gubi i nie zapamiętuje co przerwał.

----------

## Mihashi

 *Gabrys wrote:*   

> cat emerge.lista | xargs emerge

 

Chcaiłbym tylko nieśmiało zauważyć, że niniejszym zawaliłeś sobie /var/lib/portage/world wszystkimi pakietami w systemie.

Trza było dodać -1 (--oneshot)

----------

## Gabrys

 *Mihashi wrote:*   

>  *Gabrys wrote:*   cat emerge.lista | xargs emerge 
> 
> Chcaiłbym tylko nieśmiało zauważyć, że niniejszym zawaliłeś sobie /var/lib/portage/world wszystkimi pakietami w systemie.
> 
> Trza było dodać -1 (--oneshot)

 

chyba nie rozumiem... przecież i tak wszystkie pakiety w systemie trafiają do /var/lib/portage/world (chyba, że zainstaluje z -1)  :Question: 

----------

## Mihashi

No to niestety się nieco mylisz (chyba że ostatnio coś się zmieniło): tam trafiają pakiety nadrzędne (które docelowo chcesz zainstalować), natomiast portage sam wyszukuje dla nich niezainstalowane zależności i dorzuca. Po wywaleniu nadrzędnego i odpaleniu --depclean portage znajduje pakiety zainstalowane "bez powodu" i proponuje ich usunięcie.

A powyższe rozwiązanie wrzuciło do world wszystkie pakiety - te nadrzędne jak i ich zalezności, a wiec depclean polegnie. Odpalenie z -1 nic w systemie by nie zmieniło (te co były w world i tak by zostały, a te co nie były - nie trafiłyby tam)

Przykład:

```
ariadne src # emerge koffice -ptv

These are the packages that I would merge, in reverse order:

Calculating dependencies ...done!

[ebuild  N    ] app-office/koffice-1.4.2-r4  +arts -debug -doc -javascript +kdeenablefinal -mysql -postgres -xinerama 19,030 kB

[ebuild  N    ]  app-text/wv2-0.2.2  0 kB

[ebuild  N    ]   media-gfx/imagemagick-6.2.4.2-r1  +X +cups -doc -fpx -graphviz -jbig +jpeg +lcms +mpeg +perl +png +tiff +truetype +wmf +xml2 0 kB

[ebuild  N    ]    media-libs/libwmf-0.2.8.2  +X +jpeg 0 kB

[ebuild  N    ]    media-video/mpeg2vidcodec-12-r1  0 kB

[ebuild  N    ]   gnome-extra/libgsf-1.12.1  +bzip2 -debug -doc -gnome -static 0 kB
```

a do /var/lib/portage/world wędruje tylko app-office/koffice

----------

## Gabrys

a, ok, dzięki, to się czegoś przynajmniej nauczyłem  :Very Happy: .

----------

## Mihashi

 *Gabrys wrote:*   

> a, ok, dzięki, to się czegoś przynajmniej nauczyłem .

 

A cieszę sie  :Smile:  Przy okazji: to jakaś wielka tragedia nie jest, tylko wymaga nieco ręczen j roboty. Najprościej jest chyba walnąć emerge -Dptve world i przeanalizować drzewko. Po pierwsze można wywalić wszystkie pakiety które znajdziesz w emerge -ep system (bo w world są niepotrzebne). A pozostałymi można taką heurystyką:

wszystki pakiety na pierwszym poziomie zostają,

wszyskie typu "lib" (w nazwie jak libSDL albo kategori np. media-libs) - wylatują

potem emerge -p --depclean i patrzysz czy nie chce Ci przypadkiem usunąć czegoś potrzebnego

jeżeli coś takiego znajdziesz - dorzucasz do world i replay

jeżeli nie jesteś pewien po grzyba masz w systemie pakiet: equery depends pakiet

----------

## Gabrys

Kurczę, ciekawa sprawa. Niby wg tego co mówisz, to powinienem mieć większy plik world. Tymczasem ma on 300 linii (pakietów instalowało się ponad 800). Zrobiłem jednak wg Twoich wskazówek to jest:

1. wziąłem sobie plik world (czytaj skopiowałem, żeby nie pracować na żywym organizmie).

2. wywaliłem z niego wszystko co było w emerge -ep system

3. wykonałem emerge -Dptve i dodałem wszystko co na pierwszym poziomie oprócz cośtam-cośtam/.*lib.* (tak żeby było prościej) do worlda

4. wykonałem emerge -p --depclean i dodałem znów wszystkie pakiety, które wyświetlił do worlda (bo się zczaiłem, że to są pakiety, które instalowałem alternatywnymi metodami jak ACCEPT_KEYWORDS="~x86" emerge cośtam)

5. wykonanie emerge -p --depclean teraz oczywiście wyświetliło nic do zrobienia

Plik world nie skurczył się a nawet powiększył mniej więcej o tyle, ile miałem pakietów z punktu 4 co wskazuje na to, że zachodzi przynajmniej jedna z dwóch możliwości:

1. Albo nie (re)instalowałem systemu przez cat plik | xargs emerge

2. Albo emerge milion-pakietów/po-spacji nie dodaje jednak do pliku world.

---------------------------------------------------- EDIT --------------------------------------------------------------

Już wiem  :Very Happy: . emerge milion-pakietów nie dodaje do pliku world, bo były one napisane łącznie z wersją (a zatem jest to jedna z metod instalowania, która NIE dodaje do pliku world)  :Very Happy: .

----------

## mirek

Probuje przejsc na nowe gcc wg opisu ze strony http://www.gentoo.org/doc/en/gcc-upgrading.xml.

emerge -e system przebieglo bez bledow. emerge -e world mialo do przekompilowania 518 pakietow, ale wylozylo sie po 24 godzinach na 398 pakiecie.

Moge sie obyc bez tego programu, wiec go odinstalowalem i znowu  emerge -e world, a tu od poczatku chce mi sie kompilowac 517 pakietow. Czy jest jakas mozliwosc kompilacji tylko tych pakietow, ktore nie zostaly przekompilowane w nowym gcc, czy musze znow od poczatku czekac ponad 30 godzin?

----------

## Gabrys

Teraz już łatwo tego nie odkręcisz. Następnym razem jak Ci się wywali wykonaj:

emerge --resume --skipfirst (albo --skip-first, nie pamiętam)

Działa to tylko jeśli wykonujesz jedno emerge na raz.

----------

## Mihashi

 *Gabrys wrote:*   

> Już wiem . emerge milion-pakietów nie dodaje do pliku world, bo były one napisane łącznie z wersją (a zatem jest to jedna z metod instalowania, która NIE dodaje do pliku world) .

 

Serio? To teraz ja się czegoś nauczyłem  :Smile:  Sprawdzę to jeszcze sobie albo, po prostu, przeczytam mana w ostateczności  :Wink: 

----------

## lazy_bum

 *Mihashi wrote:*   

>  *Gabrys wrote:*   Już wiem :D. emerge milion-pakietów nie dodaje do pliku world, bo były one napisane łącznie z wersją (a zatem jest to jedna z metod instalowania, która NIE dodaje do pliku world) :D. 
> 
> Serio? To teraz ja się czegoś nauczyłem :-) Sprawdzę to jeszcze sobie albo, po prostu, przeczytam mana w ostateczności ;-)

 

Czyli:

```
emerge =nazwa_pakietu-wersja.1
```

 -- nie dodaje do "world"...

```
emerge nazwa_zależności_1 nazwa_zależności_2 nazwa_pakietu
```

 -- dodaje wszystko do "world"...

```
emerge nazwa_pakietu 

Calculating deps (...)

emerge (1 of X)

emerge (2 of X)
```

 -- dodaje do "world" tylko "nazwa_pakietu"...

.. dobrze rozumiem? <-:

----------

## Gabrys

Tak mi się zdaje   :Cool: 

----------

## mirek

Pojawilo sie nowe gcc

 *Quote:*   

> # gcc-config -l
> 
>  [1] i686-pc-linux-gnu-3.4.5 *
> 
>  [2] i686-pc-linux-gnu-3.4.5-hardened
> ...

 

Czyzby wymagalo to od nowa zmudnej kompilacji emerge -e system i emerge -e world?

----------

## BeteNoire

Afair to jest jedynie bugfix release, więc... nie, nie wymaga.

----------

## BeteNoire

Dopnę się jeszcze tu z takim pytaniem: czy rzeczywiście potrzebne mi jest sys-libs/libstdc++-v3 i jak to sprawdzić? Wczoraj w końcu zrobiłem emerge --prune gcc, żeby ostatecznie usunąć gcc-3.3.6 a dzisiaj przy emerge -avuD world chce mi instalować ten sys-libs/libstdc++-v3.

----------

## Ratman

jest potrzebna

----------

