# Alle Pakete in world eingetragen --> größeres Update

## Finswimmer

Hi!

Letztens habe ich ein Skript (dep) laufen lassen, welches alle World Einträge, die sich durch andere Einträge durch Abhängigkeiten ergeben, rauslöscht.

Somit war meine World Datei schön kompakt.

Dann hatte ich aber das Gefühl, dass nicht alle Pakete ubgedatet werden.

Heute bei einem Update bot Portage mir 4 Pakete zum Update an.

Nun habe ich alle Einträge in /var/db/pkg in die World Datei geschrieben, und siehe da, es sind nun 14 Stück.

Anscheinend überprüft Portage doch nicht alle installierten Pakete, sondern welche?

Die, die in world stehen, und fürs System wichtig sind?

Denn die World Datei scheint Portage Stück für Stück durchzugehen...

Ist euch das auch aufgefallen?

Wenn ihr das auch mal testen wollt, hier die Zeile:

```
grep x86 /var/db/pkg/*/*/*.ebuild|grep KEYWORD |sed s'#/var/db/pkg/##'|gawk -F / {'print $1  echo "/"  $2'} |rev | sed  's/r\-//1'  | sed  's/\-/#/1' |rev|gawk -F"#" {' print $1 '}| sed 's/\=//g' 
```

Ist aber auf ein x86 Suchwort angepasst, aber das lässt sich schnell ändern.

Tobi

----------

## Anarcho

Statt 

```
emerge world -u
```

solltest du lieber 

```
emerge -uD
```

 nehmen. Das "-D" steht für --deep und sucht auch nach Dependencies.

----------

## Finswimmer

Danke für die Antwort, aber mein update Script sieht so aus:

emerge -uDpv world --tree  --newuse

Sollte also alles abdecken, was man am System ändern kann.

Tobi

----------

## Finswimmer

Hey Anarcho, oder alle Anderen, 

probierts doch mal aus, kann auch sein, dass es aus irgendeinem Grund an dem dep Script lag.

Sind ja nur 3 Schritte:

Backup von der World Datei

Script starten

Update starten und schauen

Würde mich echt mal interessieren, ob ich ein Einzelfall bin.

Danke

Tobi

----------

## SkaaliaN

ich werde es heute abend mal testen..!

----------

## monade

Hi,

habs eben probiert. Keine neuen Updates beim emerge -avuD world.

Gruss, Matthias

----------

## SkaaliaN

 *monade wrote:*   

> Hi,
> 
> habs eben probiert. Keine neuen Updates beim emerge -avuD world.
> 
> Gruss, Matthias

 

bei mir waren ebenfalls keine..!

gruß

mattez

----------

## Finswimmer

Okay, dann ist das irgendein Problem von mir...

Naja muss mal überlegen, warum das so ist.

Vielen Dank erstmal

Tobi

----------

## Fauli

Ich kann auf meinem Rechner Folgendes reproduzieren:

```
# emerge -p digikam

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

Calculating dependencies ...done!

[ebuild     U ] media-gfx/digikam-0.8.1 [0.8.0-r1]
```

Aber:

```
# emerge -puD digikamimageplugins

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

Calculating dependencies ...done!
```

Obwohl digikam eine direkte Abhängigkeit von digikamimageplugins ist, wird beim "emerge -puD digikamimageplugins" kein Update von digikam auf Version 0.8.1 gemacht. (Und zwar in diesem Fall ja ganz unabhängig davon, was in der world-Datei eingetragen ist.)

----------

## slick

Interessante Diskussion, zumal solche Update-Probleme gelegentlich im Forum zu finden sind.

Wäre nett wenn man ein Entwickler was dazu sagen könnte wie portage beim Updaten die Pakete findet. Checkt es alle installierten Pakete oder sucht es nur im worldfile und den daraus resultierenden Abhängigkeiten? Letztes würde zumindest erklären warum nicht alle Pakete gefunden werden, es braucht ja nur in entscheidender Eintrag im worldfile fehlen.

Soweit ich es gelesen habe war es früher die ultimative Lösung einfach alle Pakete im worldfile einzutragen:

```
qpkg -I -nc >> worldfile
```

Da ich es bisher nicht geschafft habe equery davon zu überzeugen keine Versionsnummern anzugeben, weiß ich nicht wie das aktuell aussehen müßte.

----------

## Finswimmer

@slick: Schau mal weiter oben, da habe ich ne Zeile geschrieben, die jedes Paket in die world Datei einträgt, und gleichzeitig die Versionsnummer löscht.

Tobi

----------

## slick

Irgendwie ist heute nicht mein Tag...   :Crying or Very sad: 

----------

## Earthwings

 *slick wrote:*   

> Wäre nett wenn man ein Entwickler was dazu sagen könnte wie portage beim Updaten die Pakete findet. Checkt es alle installierten Pakete oder sucht es nur im worldfile und den daraus resultierenden Abhängigkeiten? Letztes würde zumindest erklären warum nicht alle Pakete gefunden werden, es braucht ja nur in entscheidender Eintrag im worldfile fehlen.

 

Bin kein Entwickler, aber alle installierten Pakete überprüft Portage nicht, sondern nur die Pakete bzw. Paketklasse (system bzw. world), die man angibt. Wenn also Toplevel-Pakete (Begriff soeben von mir erfunden) in der world Datei fehlen, werden sie auch nie aktualisiert.

Zu Fauli: Ich denke, dieses Phänonem lässt sich durch die etwas ungewöhnliche Abhängigkeit im ebuild erklären: 

```
|| ( ~media-gfx/digikam-0.8.0 ~media-gfx/digikam-0.8.1 )
```

D.h., es wird explizit eine der beiden Versionen angefordert. Ich kann mir gut vorstellen, dass dieser Sonderfall nicht "optimal" aufgelöst wird.

Edit: Das Eintragen aller installierten Pakete ins world file ist übrigens keine so gute Idee.

----------

## Finswimmer

Und woher weiß ich, welche Toplevel Pakete ich eintragen muss?

Und wie kommt es, dass du denkst, dass man nicht alle Pakete in world eintragen soll?

Hast du eine andere Idee, wie man sicherstellen kann, dass alle Pakete up2date sind?

Danke

----------

## Earthwings

 *Finswimmer wrote:*   

> Und woher weiß ich, welche Toplevel Pakete ich eintragen muss?

 

Das geschieht ja automatisch - wenn du emerge foo aufrufst, wird es in die world Datei eingetragen. Manchmal funktioniert das offenbar nicht - möglicherweise durch parallel laufende Instanzen von emerge oder einen Bug.

 *Finswimmer wrote:*   

> Und wie kommt es, dass du denkst, dass man nicht alle Pakete in world eintragen soll?

 

Abhängigkeiten, insbesondere Libraries, haben in der world Datei nichts verloren. Andernfalls können Sie nicht deinstalliert werden, wenn sich die Abhängigkeiten der Toplevel Pakete mal ändern - was des öfteren passiert.

 *Finswimmer wrote:*   

> Hast du eine andere Idee, wie man sicherstellen kann, dass alle Pakete up2date sind?

 

IMHO geht das am besten, indem man die world Datei an eine sichere Stelle kopiert, regenworld aufruft, ein diff auf die gesicherte und die neue world Datei aufruft und die Sicherung von world zurückkopiert. Danach den diff durchgehen und ggfs. einige der dort angezeigten Pakete in world eintragen. Zum Beispiel: 

```
# cp /var/lib/portage/world /root/world.backup

# regenworld

add to world: x11-base/xorg-x11

add to world: media-video/nvidia-kernel

add to world: media-video/nvidia-glx

# diff -u /root/world.backup /var/lib/portage/world

--- /root/world.backup  2006-02-07 13:48:41.000000000 +0100

+++ /var/lib/portage/world      2006-02-07 13:48:49.000000000 +0100

@@ -44,3 +44,6 @@

 kde-base/kde-meta

 media-video/mplayer

 app-misc/screen

+x11-base/xorg-x11

+media-video/nvidia-kernel

+media-video/nvidia-glx

# cp /root/world.backup /var/lib/portage/world

# echo media-video/nvidia-kernel >> /var/lib/portage/world
```

----------

## Finswimmer

Okay. Klingt gut, die Erklärung.

Aber im Zweifelsfall hat man einfach zuviele Pakete installiert, aber man gefährdet nicht das System?

Wenn ich dann ab und zu emerge --depclean aufrufe, müsste ich es doch auch schaffen?

Tobi

----------

## Earthwings

Dem System macht das nichts aus, aber emerge --depclean funktioniert nicht mehr, bzw. wird nichts deinstallieren können, weil es sich auf die Angaben in der world Datei verlässt. Wenn dort alle Pakete eingetragen sind, geht --depclean davon aus, dass du die auch alle behalten willst.

----------

## Finswimmer

Ups. Da ist was dran.

Nun gut, dann muss ich mir da irgendwas anderes einfallen lassen...

Tobi

----------

## mathes.s

Hi,

also ich habe gerade festgestellt, das ich ein komisches Problem habe. Mein Gentoo "vergisst" wohl öffters Einträge aus seinem world File. Ich habe hier kanpp 350 Pakete installiert und in meinem world File waren gerade mal 20 Zeilen. Ich habe dann ein regenworld gemacht weil ich keine Lust hatte alle Pakete einzeln reinzuschreiben. Jetzt will ein "emerger -upD world" plötzlich 80 Pakete updaten. Mich würde interessieren wie es kommt das einfach Einträge aus dem world File verschwinden. Ich hatte ähnliches schon mal und hatte damals auch ein regenworld gemacht, daher weiß ich das es mehr als 20 Einträge im world sein sollten.

Kann das an kuroo liegen?

mfg Mathes

----------

## Earthwings

Die Aktualisierung der world Datei in Portage läuft folgendermaßen ab:

-> Lies alle Pakete aus der world Datei in eine Liste

-> Schaue nach, ob Paket xy bereits eingetragen

-> Nicht? Dann füge xy an die Liste an und überschreibe die world Datei durch diese Liste

Lässt man zwei Instanzen von emerge parallel laufen, dann kommen sich beide unter ungünstigen Umständen beim Schreiben der world Datei ins Gehege und Einträge gehen verloren.

----------

## mathes.s

Hi,

naja das Problem ist aber das ich in letzter Zeit keine zwei emerge neben einander laufen hatte, oder zählen hier auch schon emerger -s oder emerge -p als zweites emerge? Ich habe eher an so was wie fehlgeschlagene emerge Vorgänge gedacht, aber da die in letzter Zeit auch nicht vorgekommen sind. Denke ich mal das es eher mit kuroo zusammen hängt. Ich denke ich werde in der nächsten Zeit einfach mal wieder zur Konsole zurückkehren und mal schauen ob sich das Schauspiel wiederholt.

mfg Mathes

----------

## Earthwings

Nein, emerge --pretend und emerge --search greifen nicht schreibend auf die world Datei zu. Ich hab mir kuroo nicht genau angeschaut, aber es wäre schon sehr sonderbar, wenn es die world Datei ändern würde.

----------

## mathes.s

Na ja ich würde auch eher darauf tippen, dass es was damit zutun hat wie kuroo mit den emerge Prozessen umgeht. Mir ist auch mal aufgefallen, dass wenn man kuroo offen hat und man parallel auf der Konsole ein emerge -s oder -p macht die ausgaben im Kuroo log landen. Von daher könnte es da doch etwas für verwirrung sorgen. Ich bin jetzt wieder auf der Konsole und werde mal gucken ob es sich wiederholt.

mfg Mathes

----------

## Finswimmer

Regenworld greift auf die log Datei zu, und baut daraus eine neue world Datei.

Wenn ich die ganzen Logs nun gelöscht habe, dann muss die World Datei doch zwangsläufig unvollständig sein?

Was könnte ich dann machen.

Danke

Tobi

----------

## Earthwings

 *Finswimmer wrote:*   

> Regenworld greift auf die log Datei zu, und baut daraus eine neue world Datei.

 

Es hängt die Pakete an, die seiner Meinung nach fehlen. Ganz perfekt ist es dabei nicht, da es Abbrüche nicht erkennt (z.B. wenn du emerge foo eingibts und anschließend Ctrl+C, dann hat emerge es nicht zur world Datei hinzugefügt, regenworld würde das aber machen).

 *Finswimmer wrote:*   

> Wenn ich die ganzen Logs nun gelöscht habe, dann muss die World Datei doch zwangsläufig unvollständig sein?

 

Ja.

 *Finswimmer wrote:*   

> Was könnte ich dann machen.

 

Dann wird es etwas anstrengender. Du kannst /var/db/pkg durchsuchen bzw. mit equery/qpkg eine Liste aller installierten Pakete erzeugen lassen (siehe englische FAQ im Forum) und dann per Skript die unnötigen Abhängigkeiten wieder aussortieren.

----------

