# [gelöst] existing preserved libs

## oliver2104

Hallo,

Ich würde gerne vom Konzept der preserved libs wegkommen.

Soweit ich das verstanden habe, geht es dabei darum,

veraltete dynamische Bibliotheken noch weiter zu behalten,

weil vereinzelte Softwarepakete mit einer neuen Version der libs

nicht zurechtkommen.

Also, ich möchte da lieber auf manche Pakete verzichten bzw. warten,

als auf meinem System Altlasten mitzuschleppen.

Aber wo kann ich das setting

```
FEATURES=preserve-libs
```

ändern.

In meiner /etc/portage/make.conf ist es nicht eingetragenLast edited by oliver2104 on Mon Nov 13, 2017 1:46 pm; edited 1 time in total

----------

## mike155

Hallo oliver2104,

du kannst folgende Zeile in Deine make.conf eintragen (wichtig ist das Minuszeichen):

```
FEATURES="-preserve-libs"
```

Aber Du solltest noch einmal überlegen, ob Du das wirklich willst. Das Feature ist nämlich sehr nützlich! Die "preserved libs" entstehen immer dann, wenn Du eine Bibliothek aktualisierst, aber ein anderes installiertes Programm auf Deinem Rechner noch die ältere Version braucht. Wenn die ältere Version der Bibliothek einfach gelöscht wird, läuft Dein anderes Programm nicht mehr.  :Sad: 

Besser ist es also, die Pakete, die Programme enthalten, die noch die alte Version der Bibliothek brauchen, neu mit emerge zu compilieren - danach verwenden die Programme die neuere Version der Bibliothek. emerge löscht dabei auch automatisch die ältere Version der Bibliothek, sobald sie nicht mehr von anderen Programmen benötigt wird.

Mike

----------

## Christian99

```
emerge @presereved-libs
```

ist der Befehl, mit dem Pakete wenn nötig neu gebaut werden, und die dann nicht mehr nötigen preserved-libs entfernt werden

----------

## grumblebear

Ich hatte das Feature schon bei Einführung deaktiviert und noch nie Probleme gehabt. Wichtig ist nur, nach jedem @world Update sofort ein revdep-rebuild zu machen, falls entsprechende Bibliotheken involviert waren.

Dass die "preseved-libs" mehr Probleme als nötig machen, zeigen einige Threads hier im Forum, aktuell z.B. dieser: https://forums.gentoo.org/viewtopic-t-1071376.html

----------

## Josef.95

Hm, ich würde davon abraten das preserve-libs Feature zu deaktivieren. Das preserve-libs Feature ist meiner Meinung nach eine der hilfreichsten Neuerungen die in den letzten zehn Jahren zu portage hinzugekommen ist - ich würde nicht drauf verzichten wollen.

 *grumblebear wrote:*   

> [...] Dass die "preseved-libs" mehr Probleme als nötig machen, zeigen einige Threads hier im Forum, aktuell z.B. dieser: https://forums.gentoo.org/viewtopic-t-1071376.html

 

Hm nein, in diesem Beispiel-Thread waren nicht preseved-libs die Ursache, sondern eher die Auswirkungen einer seit vielen Monaten (wegen massiver Sicherheitslücken) hart maskierten noch installierten und genutzten binutils-2.25.1-r1 Version. Der Admin hat schlicht viele der hilfreichen emerge Warnungen seit Monaten ignoriert, und wahrscheinlich schon ewig kein depclean mehr genutzt - dann muss man sich nicht wundern wenn irgendwann kaum noch was geht.

Ich hatte ihm nach acht Minuten nachdem er den Thread gepostet hatte eine funktionierende Lösung genant, doch er hatte dann in der Zwischenzeit schon mit --unmerge alle binutils Slots des @system Sets deinstalliert (auch dabei warnt portage heftig - wurde aber auch ignoriert) - damit nahm das Unheil dann seinen Lauf..

----------

## l3u

Preserved libs sind doch super, weil nichts mehr kaputt geht wie früher! Und wenn es welche gibt, dann wird man ja darüber informiert, und per emerge @preserved-rebuild wird man sie dann auch los. Will man doch wirklich nicht deaktivieren! Weil das Ergebnis ist ja das selbe, als wenn man ein revdep-rebuild machen würde – nur eben mit einem zwischenzeitlich funktionierenden statt kaputten System.

----------

## oliver2104

Danke für alle Antworten,

möchte dazu ein aktuelles Beispiel bringen.

ich habe heute ein System-Update gemacht.

```
emerge --ask --update --newuse --deep --with-bdeps=y @system
```

dieses System-Update installiert mir jetzt dev-qt/qtcore-4.8.7-r3

obwohl ich meines Wissens bereits auf dev-qt/qtcore-5*  umgestiegen bin.

poste dazu die letzten Zeilen aus

```
genlop -t qtcore
```

```
 Fri Jun  2 11:22:30 2017 >>> dev-qt/qtcore-4.8.7-r2

       merge time: 7 minutes and 22 seconds.

     Fri Jun  2 11:49:43 2017 >>> dev-qt/qtcore-5.6.2-r1

       merge time: 3 minutes and 21 seconds.

     Sun Jul  9 11:20:59 2017 >>> dev-qt/qtcore-5.7.1-r3

       merge time: 3 minutes and 27 seconds.

     Sat Nov  4 13:09:42 2017 >>> dev-qt/qtcore-4.8.7-r3

       merge time: 6 minutes and 49 seconds.

```

d.h irgend eine Software verlangt noch immer die qtcore-4* Version

wie kann ich diese Abhängigkeit finden und entfernen ?

Ich möchte jetzt wirklich mal ausprobieren, wie das ist, alle Altlasten loszuwerden,

keine Slot-Varianten mitzuschleppen etc..

Wenn dann manche Software nicht mehr läuft, dann läuft sie halt nicht.

----------

## Christian99

das hat überhaupt nichts mit preserved-libs zu tun. preserved-libs haben keinen einfluss auf die abhängigkeiten von paketen.

wenn qt-core:4 schon installiert ist, dann z.B. mit:

```
emerge -c qtcore:4
```

das gibt dir dann eine ausgabe in der Form:

```
Calculating dependencies   ... done!           

  dev-qt/qtcore-4.8.7-r2 pulled in by:

    app-crypt/qca-2.1.3-r1 requires >=dev-qt/qtcore-4.8.7-r2:4

    app-office/libreoffice-5.4.2.2 requires >=dev-qt/qtcore-4.8.5:4[ssl]

    app-text/poppler-0.57.0 requires dev-qt/qtcore:4

    dev-libs/libattica-0.4.2 requires dev-qt/qtcore:4

.

.

.
```

wenn es noch nicht installiert ist, dann an das emerge --update 

```
--exclude qtcore:4
```

 nahängen:

```
emerge --ask --update --newuse --deep --with-bdeps=y @system --exclude qtcore:4
```

da wird dir dann portage sagen welches paket qtcore:4 benötigt

Erläuterung: Abhängigkeiten von Paketen sind vom paket so vorgegeben. Es kommt darauf an, welches qt ein programm benötigt. Das ist eine Entscheidung des/der Entwickler des jeweiligen programms.

Wie schon Anfangs gesagt hat das überhaupt nichts mit preserved-libs zu tun, und wie Josef.95 schon sagte: Du willst preserved-libs in aller Regel haben!

PS: da qt4 meines Wissens nach auch noch nicht deprecated oder so ist, spricht auch nichts dagegen beides parallel auf dem System zu haben, vor allem so lange es nur so ein kleines Paket wie qtcore:4 ist.

----------

## Josef.95

 *oliver2104 wrote:*   

> d.h irgend eine Software verlangt noch immer die qtcore-4* Version
> 
> wie kann ich diese Abhängigkeit finden und entfernen

 

Via --depclean

emerge --depclean package mit --verbose listet die reverse Dependencies

für dein Beispiel also etwa 

```
emerge -av --depclean qtcore:4
```

Aber, wir haben aktuell im Tree Qt 4 und Qt 5

diese sind beide parallel in verschiedenen Slots installierbar. Das ist doch eher eine feine Sache, denn es gibt noch so einige Pakete die noch nicht auf Qt5 portiert sind, und daher nur mit Qt4 laufen.

/edit: Da war Christian99 mit seiner Antwort ein wenig schneller :)

----------

## oliver2104

Ok, Danke,

möglicherweise habe ich da wirklich etwas durcheinander gebracht.

```
emerge -av --depclean qtcore:4
```

listet eine Menge Software die noch von qtcore:4 abhängig ist.

Zugegeben, qtcore ist wirklich ein kleines Paket.

bei qtwebkit nervt das aber schon - dauert ca. 30min.

bei qtwebkit:5 sehe ich zumindest einen Fortschritt, dh die Versionsnummer steigt an.

bei qtwebkit:4 verstehe ich aber nicht warum portage dieselbe Version immer wieder neu installiert.

siehe Auszug aus 

```
genlop -t qtwebkit
```

```
     Fri May 26 15:05:12 2017 >>> dev-qt/qtwebkit-4.8.7

       merge time: 32 minutes and 39 seconds.

     Tue May 30 14:43:13 2017 >>> dev-qt/qtwebkit-4.8.7

       merge time: 35 minutes and 22 seconds.

     Fri Jun  2 13:48:12 2017 >>> dev-qt/qtwebkit-4.8.7

       merge time: 38 minutes and 11 seconds.

     Fri Jun  2 20:15:08 2017 >>> dev-qt/qtwebkit-5.6.2

       merge time: 27 minutes and 33 seconds.

     Mon Jul 10 15:07:36 2017 >>> dev-qt/qtwebkit-5.7.1

       merge time: 28 minutes.

     Wed Sep  6 14:25:28 2017 >>> dev-qt/qtwebkit-4.8.7

       merge time: 33 minutes and 51 seconds.

     Sun Oct 22 14:31:32 2017 >>> dev-qt/qtwebkit-5.7.1

       merge time: 27 minutes and 4 seconds
```

Habe eigentlich gedacht das hätte etwas mit preserved-libs zu tun.

Eigentlich möchte ich vermeiden, immer wieder dieseselbe Version ( qtwebkit-4.8.7 ) installieren zu müssen,

----------

## mike155

 *Quote:*   

> listet eine Menge Software die noch von qtcore:4 abhängig ist.

 

Meine Empfehlung: versuche, Qt4 schnellstmöglich los zu werden! Das geht in folgenden Schritten:

Finde raus, welche Pakete noch Qt4 benutzen.

Bei vielen Paketen wird es eine Möglichkeit geben, dass sie auch mit Qt5 laufen. Vermutlich müssen nur einige Use-Flags geändert werden (qt4, qt5).

Bei einigen wenigen Paketen kann es sein, dass sie nicht mit Qt5 zusammenarbeiten. Aber wenn sie Qt5 jetzt nicht unterstützen, werden sie es vermutlich niemals tun. Dann sollte man sich ein anderes Programm suchen. Bei mir war das beispielsweise bei keepassx der Fall: die Entwicklung ist mehr oder weniger eingeschlafen. Also habe ich zu keepassxc gewechselt...

Und zu qtwebkit: ja das Paket ist riesig und nervt. Und vermutlich benötigst Du es gar nicht. Wenn Du die USE Flags der Pakete anpasst, die qtwebkit anfordern, bekommst Du es wahrscheinlich ganz weg. Tipp: "equery d qtwebkit". Dann sieht man meistens schon, um welche USE Flags es sich handelt. Wenn nicht, muss man halt in die Paket-Definition reinschauen...

Bei mir hat das einen Nachmittag gedauert - und dann war ich Qt4 los. Das war vor 6 Monaten - ich vermute, dass es heute sogar noch einfacher ist. qtwebkit habe ich schon vor Jahren verbannt.Last edited by mike155 on Sun Nov 05, 2017 9:09 pm; edited 1 time in total

----------

## firefly

qtwebkit:4 ist seit kurzem (vor 1-2wochen) in portage tree hard masked

----------

## oliver2104

 *Quote:*   

> Meine Empfehlung: versuche, Qt4 schnellstmöglich los zu werden! Das geht in folgenden Schritten:
> 
> 1. Finde raus, welche Pakete noch Qt4 benutzen. 

 

Das würde ich gerne, leider hab ich keine Idee wie das anzugehen ist.

QT4 ist ja kein einzelnes Paket, sondern eher eine Sammlung aus vielen Bibliotheken/Modulen.

----------

## mike155

 *Quote:*   

> Das würde ich gerne, leider hab ich keine Idee wie das anzugehen ist.

 

Wenn ich es richtig verstehe, gibt es auf Deinem System noch eine Menge Pakete, die noch Qt4 verwenden. 

Möglicherweise ist noch das USE-Flag "qt4" gesetzt. Also editiere die Datei "/etc/portage/make.conf" und lösche bei den USE-Flags "qt4" und "qt3support" (falls vorhanden). Füge sicherheitshalber am Ende der USE-Flags hinzu: "-qt4 -qt3support" (Minus ist wichtig!). Falls Du QtWebkit loswerden willst: lösche auch das USE Flag webkit (falls vorhanden) und füge "-webkit" ans Ende der USE-Flags hinzu. 

Überprüfe auch die Datei "/etc/portage/package.use", ob hier irgendwo die USE-Flags "qt4" oder "qt3support" (oder auch "webkit") gesetzt sind. Wenn ja: entferne diese USE-Flags.

Falls LibreOffice mit "kde" USE-Flag installiert ist: füge folgende Zeile an das Ende von "/etc/portage/package.use" hinzu:

```
app-office/libreoffice  gtk -kde -gtk3 -gnome

```

Schaue in der Datei "/var/lib/portage/world" nach, ob hier explizit Qt4-Pakete definiert sind. Wenn ja, entferne sie.

Führe folgende Anweisungen aus:

```
emerge --update --deep --newuse -av world       # Nach der Anzeige: überprüfen uns mit "Yes" bestätigen

emerge @presereved-libs

emerge --depclean
```

Wichtig ist, dass alle Fehler behoben werden. Am Ende muss man die drei Anweisungen erneut aufrufen können und es darf keine Warnungen oder Fehler geben und die drei Anweisungen dürfen dann nichts mehr machen.

Falls jetzt Qt4 immer noch installiert ist, kann es sich nur noch um einige sehr wenige Pakete handeln, wie z.B. keepassx. Bitte poste die Ausgabe folgender Anweisung (wie weiter oben von Josef.95 geschrieben) - dann können wir gemeinsam weiter sehen: 

```
emerge -av --depclean qtcore:4
```

Das ganze ist etwas Arbeit - aber es lohnt sich!

----------

## oliver2104

Danke für die gute Anleitung,

bin noch immer am werken.

zur Zeit hab ich noch folgende Probleme:

```
emerge: there are no ebuilds built with USE flags to satisfy "sys-auth/polkit-qt[qt4]".

!!! One of the following packages is required to complete your request:

- sys-auth/polkit-qt-0.112.0-r1::gentoo (Change USE: +qt4)

(dependency required by "kde-frameworks/kdelibs-4.14.37::gentoo" [ebuild])

(dependency required by "dev-vcs/subversion-1.9.7::gentoo[kwallet]" [installed])

(dependency required by "@selected" [set])

(dependency required by "@world" [argument])
```

und auch

```
emerge: there are no ebuilds built with USE flags to satisfy "media-libs/phonon[qt4]".

!!! One of the following packages is required to complete your request:

- media-libs/phonon-4.9.1-r1::gentoo (Change USE: +qt4)

(dependency required by "kde-frameworks/kdelibs-4.14.37::gentoo" [ebuild])

(dependency required by "kdelibs" [argument]
```

----------

## Josef.95

 *oliver2104 wrote:*   

> Danke für die gute Anleitung,
> 
> bin noch immer am werken.
> 
> zur Zeit hab ich noch folgende Probleme:
> ...

 

Hier hängen die Abhängigkeiten zu kdelibs --> qt4 (und von kdelibs dann auch auf media-libs/phonon[qt4])

am

(dependency required by "dev-vcs/subversion-1.9.7::gentoo[kwallet]" [installed])

Baue das dev-vcs/subversion Paket mit USE=-kwallet

damit bist du die Abhängigkeiten (und den kwallet Supoort im subversion) sofern gewollt dann los.

----------

## oliver2104

Sehr gut und Danke,

also für mich wär das gelöst.

```
emerge --update --deep --newuse -av world
```

 ist ebenso wie 

```
emerge --depclean
```

 problemlos durchgelaufen.

Und

```
emerge @presereved-libs
```

ergibt

```
There are no sets to satisfy 'presereved-libs'
```

----------

## Max Steel

In dem Zusammenhang Abhängigkeiten und co hilft auch emerge --tree, equery [dep]g[raph] (Was hängt ab von <Paket>) bzw equery d[epends] (Was ist Abhängigt zu <paket>)

(Ich selbst habe schon seit längerem -tv in den EMERGE_DEFAULT_OPTS in der make.conf

----------

