# Alles neu kompilieren wie?

## drakesoft

Hallo,

ich habe leichte probleme mit meinem gentoo defekte dateien und so ... ich würde gerne alles was installiert ist neu kompilieren. Kann mit jemand sagen wie das funktioniert?

grüße, drakesoft

----------

## Aldo

```
emerge -e world
```

----------

## forrestfunk81

emerge -e world

----------

## mv

emerge -e world baut i.a. nicht alles neu. Korrekt ist 

```
emerge -eD --with-bdeps y @system @world
```

 wobei das "@"-Symbol ev. erst ab portage-2.2 erlaubt/sinnvoll ist. Wobei man dazu sagen muss, dass für Probleme mit Libraries grundsätzlich schon ein 

```
revdep-rebuild
```

 ausreicht, was wesentlich weniger neu baut.

----------

## dertobi123

 *drakesoft wrote:*   

> Hallo,
> 
> ich habe leichte probleme mit meinem gentoo defekte dateien und so ... ich würde gerne alles was installiert ist neu kompilieren. Kann mit jemand sagen wie das funktioniert?
> 
> grüße, drakesoft

 

Der Lösungsansatz ist Schwachsinn, sorry. Anstelle um das Problem herum zu frickeln, solltest du lieber schauen *welche* Dateien "defekt" sind und ein paar Informationen dazu liefern - so kann dir besser und direkter geholfen werden, als hier an $irgendwas rumzudoktorn ...

----------

## Polynomial-C

 *mv wrote:*   

> emerge -e world baut i.a. nicht alles neu. Korrekt ist 
> 
> ```
> emerge -eD --with-bdeps y @system @world
> ```
> ...

 

Das ist falsch. Mit --emptytree verhält sich emerge so, als sein kein einziges Paket im System installiert. Das schließt automatisch auch tiefe Abhängigkeiten (--deep), sowie buildtime-dependencies (--with-bdeps=y) mit ein, denn emerge geht ja in Verbindung mit --emptytree davon aus, daß diese Pakete noch nicht im System installiert sind und daher als Abhängigkeit(en) für die Pakete im worldfile erstmal erfüllt werden müssen durch (neu)installation.

```
emerge -e world
```

 bzw. für portage-2.2* 

```
emerge -e @world
```

ist daher ausreichend.

----------

## Max Steel

 *Polynomial-C wrote:*   

>  *mv wrote:*   emerge -e world baut i.a. nicht alles neu. Korrekt ist 
> 
> ```
> emerge -eD --with-bdeps y @system @world
> ```
> ...

 

Das stimmt auch noch nicht ganz.

Denn was machst du mit denen seltenen Paketen die wirklich nur im system-set sind, aber das systemset nicht in der world-file liegt.

Also sollte man dennoch emerge -e system && emerge -e world eingeben.

bzw, für portage 2.2* emerge -e @system @world

----------

## Polynomial-C

 *Max Steel wrote:*   

>  *Polynomial-C wrote:*    *mv wrote:*   emerge -e world baut i.a. nicht alles neu. Korrekt ist 
> 
> ```
> emerge -eD --with-bdeps y @system @world
> ```
> ...

 

Für portage-2.2* stimmt deine Aussage, denn da wurden @world und @system wirklich getrennt. Bei Versionen vor portage-2.2* beinhaltet world automatisch auch system.

Wichtig zu erwähnen wäre noch, daß beim Installieren von portage-2.2* das @system set automatisch in die Datei /var/lib/portage/world_sets mit eingetragen wird, so daß @system auch mit einbezogen wird, wenn man 

```
emerge -e @world
```

 angibt, sofern man das @system set nicht manuell aus dieser Datei entfernt.

----------

## Martux

Ich würde auf jeden Fall gerne noch auf die Möglichkeit hinweisen, daß emerge -e mit einem Fehler aussteigt, besonders nervig wenn man daß über Nacht laufen hat.

Deswegen mache ich es immer so:

```

emerge -e @system @world; emerge --resume --skipfirst

```

Wobei ich meistens das emerge --resume --skipfirst mehrmals anhänge, für den Fall daß mehrere Pakete nicht so wollen.

----------

## Polynomial-C

Seit portage-2.1.6 gibt es

 *man emerge wrote:*   

> 
> 
> ```
>        --keep-going
> 
> ...

 

Da wäre ein 

```
emerge --keep-going --emptytree world
```

 wohl effektiver.   :Wink: 

----------

## Martux

Hatte ich vergessen, --keep-going habe ich in den EMERGE_DEFAULT_OPTS mit drin.

----------

## Kampfkeks

Eigentlich kann ich dem Tobi nur zustimmen. Ein komplettes Neukompilieren des ganzen Systems klingt nach einem dumpfen Brute-Force, wobei die Chancen für ein funktionierendes System danach dann, noch nicht einmal besonders hoch sind.

Aber mal abgesehen davon... um alle Pakete (mit >=portage-2.2) neu zu kompilieren, wie wäre es damit?

```

emerge @installed

```

Und dabei muss man auch an keinerlei Optionen wie "--emptytree, --with-bdeps, --deep" denken, da einfach alles Installierte genommen wird.

Mit "emerge -e @system @world" findet er bei mir leider nicht alle Pakete.

Hier ein kleiner Vergleich...

```
1104

# ich habe also 1104 Pakete Installiert
```

```
...

Total: 1104 packages (1104 reinstalls)
```

```
...

Total: 838 packages (838 reinstalls)
```

Auch wenn ich noch alle möglichen (wenn auch schon implizit eingebundenen) Optionen wie "--deep" und "--with-bdeps" Angebe, so ändert sich nichts daran. Habe ich irgend etwas vergessen? Wie sieht das bei euch aus?

Seit ich mit portage 2.2 gemerkt habe, dass mit "@world @system" nicht alle Pakete gefunden werden, habe ich mir zum Updaten des Systems inzwischen "emerge -uav @installed" angewöhnt.

----------

## Max Steel

@Kampfkeks

Das kommt vermutlich daher das du bereits alte nicht mehr benötigte (und nicht mehr supportete) Pakete installiert hast, die einfach nur Balast sind, ohne wirkliche Funktion, oder du sie per -1 mal installiert hast, und nicht in die world-Datei eingetragen hast.

Ich empfehle die daher mal ein emerge -a --depclean.

Und danach ein emerge -auDN @system @world && revdep-rebuild

----------

## dertobi123

 *Max Steel wrote:*   

> @Kampfkeks
> 
> Das kommt vermutlich daher das du bereits alte nicht mehr benötigte (und nicht mehr supportete) Pakete installiert hast, die einfach nur Balast sind, ohne wirkliche Funktion, oder du sie per -1 mal installiert hast, und nicht in die world-Datei eingetragen hast.

 

Bei 838 zu 1104 Paketen? Sehr unwahrscheinlich ...

----------

## Kampfkeks

Ja, das kann nicht möglich sein, da das System (ein neues Notebook) gerade einmal 5 Wochen alt ist.

----------

## mv

 *Kampfkeks wrote:*   

> Ja, das kann nicht möglich sein, da das System (ein neues Notebook) gerade einmal 5 Wochen alt ist.

 

Aber selbstverständlich ist das möglich, und wenn Du nicht auf einen echten Bug in Portage gestoßen bist, ist das sogar sicher so. Vermutlich hast Du irgendwann mal etwas installiert, was viele Dependencies gezogen hat (kde-4 beispielsweise) und dann wieder entfernt ohne dabei die Dependencies zu entfernen. Oder Du hast einen neuen Slot bekommen und den alten niemals entfernt aber auch nicht explizit im world-file eingetragen (kde:3 -> kde:4). Schau Dir halt mal die Unterschiede an, beispielsweise mit "world test" des world-Scripts.

Von der emerge @installed-Variante würde ich jedenfalls abraten, weil Du auf diese Weise keine Security-Fixes bekommst, und weil es sowieso sinnvoller ist, unbenutzte Programme und Bibliotheken zu entfernen. Das korrekte Vorgehen im Normalfall ist revdep-rebuild und danach Entfernung der unbenutzten Pakete (z.B. mit emerge --depclean oder Pipen der Ausgabe des obigen world-scripts nach xargs emerge -C). Neubauen von allem ist normalerweise höchstens nach einem gcc-Upgrade sinnvoll.

----------

## Kampfkeks

Danke, dein "World-Script" werde ich ausprobieren, sowie mir auch mal die anderen Scripte mal näher Anschauen.

Ich meinte auch deshalb nur, dass das nicht möglich sein kann, weil ich bisher eben (fast) nichts deinstalliert habe. Wenn das System nun ein paar Jahre auf dem Buckel hätte, und ich nie ein --depclean gemacht hätte, würde ich das auch nicht ausschließen. Ich habe zwar KDE4 drauf, jedoch ist das auch immer noch drauf. Seit ich geplant habe mir ein neues Notebook zuzulegen (was über 1 Jahr gedauert hat), habe ich mir auch entsprechend Gedanken darüber gemacht, was denn nun genau drauf soll. Einen wilden wechsel zwischen unterschiedlichen Xorg und KDE-Version gab es eben nicht, da ich mich ja zuvor genau festgelegt habe, was drauf soll. Von daher kann ich solche "Wahrscheinlichkeiten" und Vermutungen auf einen Wechsel von größeren Paketen ausschließen.

 *Quote:*   

> 
> 
> Von der emerge @installed-Variante würde ich jedenfalls abraten, weil Du auf diese Weise keine Security-Fixes bekommst, und weil es sowieso sinnvoller ist, unbenutzte Programme und Bibliotheken zu entfernen. Das korrekte Vorgehen im Normalfall ist revdep-rebuild und danach Entfernung der unbenutzten Pakete (z.B. mit emerge --depclean oder Pipen der Ausgabe des obigen world-scripts nach xargs emerge -C). Neubauen von allem ist normalerweise höchstens nach einem gcc-Upgrade sinnvoll.

 

Was spricht denn dagegen, dass man ein "--depclean" nicht auch nach einem "emerge @installed" durchführen kann? Dadurch werden genauso alle nicht mehr benötigten Pakete gelöscht wie bei jeder anderen Variante auch.

----------

## mv

 *Kampfkeks wrote:*   

> Was spricht denn dagegen, dass man ein "--depclean" nicht auch nach einem "emerge @installed" durchführen kann? Dadurch werden genauso alle nicht mehr benötigten Pakete gelöscht wie bei jeder anderen Variante auch.

 

Sie werden erst gelöscht, nachdem sie neu gebaut wurden - das Neubauen für sie war also schlichtweg überflüssig. Freilich: Wenn man dann zusätzlich noch ein emerge -NDu --with-bdeps y @system @world hinterherschickt, kommt es aufs selbe hinaus. Nur hat man halt überflüssigerweise etliche Pakete zweimal (statt einmal oder gar nicht) neu gebaut.

----------

## toralf

 *Max Steel wrote:*   

> Ich empfehle die daher mal ein emerge -a --depclean

 Vorsicht, depclean funktioniert nicht fehlerfrei (sys-apps/portage-2.1.6.4).

----------

## Polynomial-C

 *toralf wrote:*   

>  *Max Steel wrote:*   Ich empfehle die daher mal ein emerge -a --depclean Vorsicht, depclean funktioniert nicht fehlerfrei (sys-apps/portage-2.1.6.4).

 

Falls du damit bug 254009 meinst, hast du leider unrecht. Bisher habe ich noch kein ungewöhnliches Verhalten bei --depclean feststellen können.

----------

## toralf

 *Polynomial-C wrote:*   

> Falls du damit bug 254009 meinst, hast du leider unrecht. Bisher habe ich noch kein ungewöhnliches Verhalten bei --depclean feststellen können.

 Oh nein, aber in der Vergangenheit wurde sogar in der portage manpage davor gewarnt, daß depclean "broken" ist - ist wohl mittlerweile aber behoben.

----------

