Autoren:

Dennis Nienhüser
Autor

sirro
Ergänzungen

Tobias Scherbaum
Bearbeiter
21. Oktober 2004, Rev. 1.2

Neue Funktionen und Optionen in Portage 2.0.51

Portage 2.0.51 bringt zahlreiche neue Funktionen und Optionen mit, die wir Ihnen in diesem Dokument vorstellen möchten.

Neue Funktionen und Optionen in Portage 2.0.51

1. Einleitende Worte ...

1.1 Portage 2.0.51 Status

Portage 2.0.51 wurde am 20. Oktober freigegeben. Wir stellen an dieser Stelle die wichtigsten Änderungen und Neuerungen zusammen.

Bevor Sie sich die neuen Funktionen von Portage-2.0.51 anschauen, sollten Ihnen die von 2.0.50 bekannt sein - bitte lesen Sie zunächst Neue Portage Features [1], nie verkehrt ist ein Blick ins Changelog [2].

1.2 Zusammenfassung für ganz Eilige

  • Deutlich schnellere Berechnung der Abhängigkeiten
  • /var/cache/edb/world jetzt in /var/lib/portage/world
  • /var/cache/edb/virtuals wird nicht mehr benutzt, Virtuals werden dynamisch berechnet
  • emerge --inject ist nicht mehr unterstützt
  • emerge --newuse world installiert Pakete mit geänderten USE Flags neu
  • neue FEATURES autoconfig, collision-protect, gpg, maketest, candy

2. Änderungen

2.1 Wo ist /var/cache/edb/{virtuals,world}?

Die alte World Datei (die Datei, welche alle Pakete enthält, die explizit per emerge installiert wurden) befindet sich jetzt in /var/lib/portage/world. Das alte World File (/var/cache/edb/world) ist nun ein symbolischer Link.

/var/cache/edb/virtuals existiert ebenfalls nicht mehr, die Virtuals werden fortan dynamisch berechnet. Wollen Sie Änderungen an den virtuellen Paketen vornehmen, können Sie von nun an /etc/portage/profile/virtuals benutzen.

2.2 Warum funktioniert emerge --inject nicht mehr?

--inject ist als deprecated markiert und kann nicht mehr benutzt werden. Als Ersatz für --inject benutzt man die in Portage 2.0.51 eingeführte Datei /etc/portage/package.mask und die neue /etc/portage/profile/package.provided, allerdings gilt es hier ein paar Besonderheiten zu beachten.

In seltenen Fällen kann es vorkommen, dass Software nicht über Portage verfügbar ist. Wenn Sie nicht selbst ein ebuild schreiben wollen (oder können), können Sie das Paket anderweitig installieren - z.B. durch Herunterladen und Entpacken einer Binärdatei oder Kompilieren der Quelltexte von Hand. In solch einem Fall war emerge inject nützlich, um Portage mitzuteilen, dass das Paket installiert ist.

In Portage 2.0.51 tragen Sie stattdessen das Paket in /etc/portage/profile/package.provided ein. Portage sorgt nun dafür, dass die Abhängigkeiten für dieses Paket erfüllt werden.

Wichtig
Das Paket wird bei der Paketsuche (emerge --search) nicht als installiert markiert. Portage kümmert sich aber darum, dass die Abhängigkeiten erfüllt sind.
Befehlsauflistung  2.1: Beispiel: Paket wurde nicht über Portage installiert
Bisher:
# emerge inject sys-kernel/development-sources-2.6.9
Jetzt:
# echo "sys-kernel/development-sources-2.6.9" >> /etc/portage/profile/package.provided

emerge inject konnte auch benutzt werden, um das Updaten eines (per emerge) installierten Pakets zu verhindern. In diesem Fall hilft package.provided nicht weiter. Anstelle dessen tragen Sie das Paket von jetzt an in /etc/portage/package.mask ein. Natürlich können Sie ">", ">=" usw. wie gewohnt nutzen, um mehrere Versionen auszuschließen. Falls sich Abhängigkeiten geändert haben, tragen Sie das Paket auch in /etc/portage/profile/package.provided ein.

Befehlsauflistung  2.2: Beispiel: Paket soll nicht aktualisiert werden
Bisher:
# emerge inject x11-base/xorg-x11-6.7.0-r7
Jetzt:
# echo "x11-base/xorg-x11-6.7.0-r7" >> /etc/portage/package.mask

Einen Sonderfall bilden Pakete, bei denen die installierte Version aus dem Portage Baum entfernt wurde. Hier hilft das Eintragen der neuen Version in package.mask nicht, um ein Update (bzw. Downgrade) zu verhindern. Zunächst sollten Sie jedoch nachschauen, warum das Paket nicht mehr in Portage vorhanden ist. Ist es z.B. wegen einer bekannten Sicherheitslücke verschwunden, sollten Sie das Paket aktualisieren. Hinweise auf den Entfernungsgrund gibt es normalerweise im Changelog (im Verzeichnis des ebuilds zu finden, z.b. /usr/portage/sys-kernel/gentoo-dev-sources/Changelog), in Bugzilla oder den Sicherheitshinweisen. Wollen Sie das Paket trotz allem nicht aktualisieren, können Sie das alte ebuild aus /var/db/pkg/ (oder aus dem CVS Repository von www.gentoo.org) in ein sogenanntes Overlay Verzeichnis (normalerweise /usr/local/portage, siehe man make.conf) kopieren und dann wie oben verfahren.

2.3 Wieso werden einige USE-Flags in der --verbose Anzeige mit einem Stern* gekennzeichnet?

Befehlsauflistung  3.3: Beispiel
# emerge -pv gnupg

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

Calculating dependencies ...done!
[ebuild   R   ] app-crypt/gnupg-1.2.4  -X* -caps -debug -idea -ldap -nls -static 0 kB

Total size of downloads: 0 kB

Ein Sternchen hinter einem USE Flag weist darauf hin, dass bei der Installation dieses Paketes das USE Flag anders gesetzt war.

3. Neue Funktionen und Optionen

3.1 emerge --newuse world

emerge --newuse world ist eine bequeme Möglichkeit, all diejenigen Pakete neu zu übersetzen, die Sie mit anderen USE-Flags als den derzeitigen installiert haben.

Befehlsauflistung  1.1: Beispiel
# emerge --newuse -uD world -av

3.2 Neue FEATURES

In Portage-2.0.51 gibt es einige neue Optionen, die der Features Variable in /etc/make.conf hinzugefügt werden können. Lesen Sie hierzu auch man make.conf.

FEATURES="autoconfig" passt weder automatisch die Konfigurationsdateien an, noch konfiguriert es irgendwelche Pakete nach der Installation. Stattdessen hilft es die Nutzung von Gentoo auf eingebetteten Systemen (Embedded Systems) zu verbessern.

FEATURES="gpg" aktiviert die GPG-Signierung von Ebuilds. Damit sind jetzt nicht nur die Pakete auf den Download-Spiegeln durch MD5-Checksummen prüfbar, auch die Integrität der Ebuilds auf den rsync-Spiegeln lässt sich kontrollieren. Wählen können Sie zwischen FEATURES="gpg", FEATURES="gpg strict" und FEATURES="gpg severe", wobei die Sicherheitsüberprüfungen von links nach rechts strenger werden.

FEATURES="collision-protect" verhindert, dass Dateien eines Pakets Dateien eines anderen überschreiben können. So interessant und wichtig sich das anhört, beansprucht es doch sehr viele Ressourcen und kann währends des bootstrappings nicht benutzt werden.

FEATURES="maketest" erlaubt Ebuilds, nach dem Kompilieren einige Tests durchzuführen. So kann z.B. überprüft werden, ob Datei xy tatsächlich erstellt wurde. Ist FEATURES="maketest" aktiviert, wird entweder die "make check" Funktion des Pakets aufgerufen oder die pkg_check Funktion des ebuilds, falls vorhanden.

FEATURES="candy" ändert die Fortschrittsanzeige ("spinner") beim Berechnen der Abhängigkeiten. Bilden Sie sich am besten selbst ein Urteil:

Befehlsauflistung  2.2
# FEATURES=candy emerge -p world

3.3 Detailverbesserungen

Ein paar Detailverbesserungen gibt es in den Fehler-/Warnmeldungen ...

Befehlsauflistung  3.3: ... bei Fehlern während des Kompilierens
!!! ERROR: dev-java/sun-j2me-1.0.4.01 failed.
!!! Function src_unpack, Line 26, Exitcode 0
!!! (no error message)
!!! If you need support, post the topmost build error, NOT this status message.
Befehlsauflistung  3.4: ... bei der Nutzung von --upgradeonly
# emerge --upgradeonly world
*** Warning: --upgradeonly is a deprecated option in portage-2.0.51_rc1
*** and will likely be removed in a future version.
Befehlsauflistung  3.5: ... bei emerge /pfad/zum/name.ebuild
# emerge /path/to/ebuild
emerging by path implies --oneshot... adding --oneshot to options.

*** emerging by path is broken and may not always work!!!
Befehlsauflistung  3.6: ... bei Entfernung wichtiger Pakete
# emerge unmerge portage

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

>>> Waiting 10 seconds before starting...
>>> (Control-C to abort)...
Press Ctrl-C to Stop in: 10 9 8 7 6 5 4 3

4. Installation

Falls Sie ihr System regelmäßig aktualisieren, wird die neue Version von Portage automatisch installiert. Genauso problemlos können Sie es manuell aktualisieren.

Befehlsauflistung  1.1: Installation von Portage 2.0.51
# emerge sync
# emerge portage
# etc-update

Damit sind Sie aber noch nicht fertig. Konsequenterweise sollten Sie Pakete, die mittels emerge --inject eingespielt worden sind, in package.provided eintragen und dann deinstallieren. Das erledigen Sie am besten mit einem Skript [4].

Befehlsauflistung  1.2: Auflisten von mit --inject installierten Paketen
# wget -P /usr/local/bin http://www.stud.uni-karlsruhe.de/~uxhz/gentoo/misc/einjected
# chmod +x /usr/local/bin/einjected
# einjected

Falls Pakete aufgelistet werden, können diese in /etc/portage/profile/package.provided eingetragen und danach deinstalliert werden. einjected --move erledigt beides automatisch.

5. Appendix

[1] http://www.gentoo.de/main/de/portage-2.0.50.xml

[2] less /usr/share/doc/portage-2.0.51/ChangeLog.gz

[3] http://thread.gmane.org/gmane.linux.gentoo.devel/21204

[4] http://www.stud.uni-karlsruhe.de/~uxhz/gentoo/misc/einjected

[5] http://www.gentoo.org/news/20041021-portage51.xml



Kontakt | Impressum
Gentoo ® ist eine eingetragene Marke des Förderverein Gentoo e.V.