Paketmanagment Portage / Emerge

Gentoo verwendet ein BSD-Port-ähnliches System namens Portage. Portage ist ein Paketverwaltungssystem, das eine große Flexibilität bei der Installation und Wartung von Software auf einem Gentoo-System ermöglicht. Es bietet Kompilierzeitoptionsunterstützung (durch USE-Flags), bedingte Abhängigkeiten, Zusammenfassung der Pre-Package-Installation, sichere Installation und  Deinstallation von Software. Systemprofile und Konfigurationsdatei-Schutz unter mehreren anderen Features. Standardmäßig wird in Gentoo das gesamte System aus dem Quellcode mit Hilfe der Optimierungsoptionen des Benutzers erstellt. Der Benutzer hat die vollständige Kontrolle darüber, welche Pakete installiert sind oder nicht. Gentoo bietet zahlreiche Möglichkeiten, sodass Benutzer Gentoo nach eigenen Vorgaben installieren können, weshalb Gentoo als Meta-Distribution bezeichnet wird. Gentoo ist aktiv entwickelt. Die gesamte Distribution nutzt einen schnellen Tempo-Entwicklungsstil: Patches zu Paketen werden schnell in den Mainline-Baum integriert, die Dokumentation wird täglich aktualisiert, Portage-Features werden häufig hinzugefügt und offizielle Releases erfolgen zweimal pro Jahr.

Der Portage Baum ist eine lokale Kopie (zu finden in /usr/portage) des zentralen Software Paket Repositoriums. Wann immer Software auf einem System mit Hilfe des emerge Befehls installiert wird, wird der Portage Baum zuvor durchsucht. Wenn ein Paketname gefunden wird, werden seine Abhängigkeiten berechnet, der Quellcode für die Pakete und seine Abhängigkeiten werden heruntergeladen und dann nacheinander für das System kompiliert und installiert. Das emerge Befehlszeilen-Werkzeug ist das Herz von Portage. Der Befehl ist höchst komplex, mit vielen Optionen und Modifizierern. Er ist in der Python Programmiersprache abgefasst. Das Programm berechnet und verwaltet Abhängigkeiten, führt ebuilds aus und pflegt den lokalen Portage Baum und die Datenbank installierter Pakete. Die Kompilierungseinstellungen der ebuilds können durch die CFLAGS Umgebungsvariablen verändert werden, basierend auf den Spezifikationen des individuellen Computer und auf den Wünschen der Benutzer zur Optimierung. Was emerge installiert, ist abhängig und wird beeinflusst durch die USE Flag Einstellungen.  Sie entscheiden, welche optionale Funktionen in die Installation oder die Aktualisierung einer Anwendung einfließen.

Im Zusammenhang mit Portage kann der Begriff „Paket“ auch als „Atom“ bezeichnet werden. Lassen Sie sich nicht verwirren, wenn Sie den Begriff „Atom“ anstelle des Begriffs „Paket“ verwenden.

Befehle aus dem Bereich des Paketmanagments

Portage synchronisieren / Aktualisieren des Portage Baums:

    localhost # emerge --sync

Dies aktualisiert den Portage Baum und baut ihn neu aufgrund einer Synchronisation mit Online-Servern auf. Dieser Befehl wird ausgeführt, bevor man  beginnt, Pakete zu installieren oder zu entfernen. So wird sichergestellt , daß der Portage Baum auf den neuesten Informationen aufbaut.

localhost # emerge -av <Paketname>

oder:

 localhost   # emerge =packagecategory/Paketname-version

Dies installiert oder aktualisiert auf höhere oder niedrigere Versionen von Paketen:

localhost    # emerge -u <Paketname>
 

Es gibt mehr als 14.100 Pakete in Portage, unten aufgeführt sind nur ein paar gültige Paket-Atome, die installiert werden können:

  • www-client/firefox-3.6.13
  • net-fs/samba-3.5.6
  • media-video/mplayer-1.0_rc4_p20101114
  • app-emulation/wine-1.3.10
  • media-gfx/inkscape-0.48.0
  • sys-devel/gcc-4.4.4-r2

Pakete können entweder angesehen werden auf: http://packages.gentoo.org

Das System aktualisieren

Zuerst einmal solltest du den Portage Baum auf den auf den aktuellesten Stand bringen.

Nachdem der Portage Baum aktualisiert wurde, kannst du das System aktualisieren durch Eingabe des Befehls:

    # emerge -avuDN world

Dies wird eine „wieder-emergen“ aller Pakete auslösen, von denen es neuere Fassungen im Portage Baum gibt.
(Hinweis: wieder-emergen (oder re-emerging) eines Programmes ist anders als eine erneute Installation: die existierende Version des System wird durch eine erneut kompilierte Fassung des Paketes ersetzt, wobei die Konfigurationsdateien, Programmeinstellungen, Lesezeichen, Themen und sonstige Dateien intakt bleiben.)

Pakete entfernen

   localhost  # emerge -C <Paketname>

oder

  localhost  # emerge -C =packagecategory/Paketname-version

Dies entfernt und bereinigt alles Pakete und seine nicht mehr notwendigen Abhängigkeiten. Es sollte nach Jedem world-Update durchgeführt werden:

 localhost   # emerge --depclean

Durch die Option –pretend kann vorher angeschaut werden, was bei der Ausführung von depclean entfernt wird. Falls gewünscht kann man ein Paket über /etc/portage/package.use sichern bzw. veranlassen, dass das Paket nicht gelöscht wird.

Ausführlichkeit von Portage verändern

Die Option -v (verbose) läßt Portage ausführlicher berichten:

  localhost  # emerge -v <Paketname>

Suchen (search)
Dies sucht nach einem Paket mit dem Paketnamen:

  localhost  # emerge -s <Paketname>

Dies sucht nach einem Paket innerhalb der Paketnamen und der Paketbeschreibungen:

   localhost  # emerge -S <Paketname>

Fragen und Vorgaben (ask)

Dies bewirkt das es den Benutzer bei jeden Schritt um eine Entscheidung bittet:

   localhost # emerge -a <Paketname>

Dies ermöglicht es Vorgaben an emerge (pretend)  zu machen, wie es handeln soll. Es ist eine gute Idee, dies mit dem -v Flag zu verbinden.

  localhost  # emerge -p <Paketname>

 Die Aufschlüsselung der Information wird hier aufgeführt:
N = neu (bisher nicht installiert)
S = neuer SLOT Installation (parallele Installation)
U = updating/aktualisieren (auf höhere Version)
D = downgrading/aktualisieren (auf niedrigere Version)
R = ersetzen (erneut mit derselben Version re-emergen)
F = hole eingeschränkt (muß manuell heruntergeladen werden)
f = hole eingeschränkt (bereits heruntergeladen)
B = installiert durch eine bereits installierte Version

Andere sinnvolle Optionen

-l (list) fügt das Paket nicht zur World Datei hinzu (der Liste an Paketen, die Sie wirklich installiert haben möchten), wenn das Paket installiert wird:

   localhost # emerge -1 <Paketname>

emerged nicht das Paket, sondern nur seine Abhängigkeiten:

 localhost   # emerge -o <Paketname>

installiert und entpackt das Paket nicht, es wird vielmehr nur heruntergeladen:

localhost    # emerge -f <Paketname>

führt die letzte Operation fort, was sinnvoll ist, wenn absichtlich oder unabsichtlich mittendrin STRG-C gedrückt – und so der Vorgang abgebrochen wurde:

 localhost   # emerge --resume

Große Aktualisierungen & Rekompilierungen

Dies reinstalliert / aktualisiert alles, was sich in der World Datei  befindet:

localhost    # emerge -avuND world

oder

localhost    # emerge -ave world

Dies reinstalliert / aktuallisiert alles in Ihrem Kernsystem:

 localhost   # emerge -av system

oder

localhost    # emerge -e system

Hard masked Pakete & /etc/portage/package.mask & /etc/portage/package.unmask
Maskierte / Hartmaskierte Pakete in Portage sind Pakete, die verriegelt bzw.  geblockt werden um nicht installiert zu werden

/etc/portage/package.keywords
Diese Datei wird dazu benutzt um unstabile Pakete auf stabilen System laufen zu lassen oder aber auch ebuilds, die nicht für Ihr System getestet wurden.

etc-update & dispatch-conf
Diese Werkzeuge aktualisieren Ihre Konfigurations-Dateien nachdem Pakete emerged worden sind.

localhost  # etc-update

revdep-rebuild, equery, eix, und mehr

revdep-rebuild baut zerbrochene Pakete erneut, basierende auf rückwärtige Abhängigkeiten und zerbrochenen Bibliotheken. 

Über emerge –info können die derzeit hinterlegten Infos zu Portage abgerufen werden. Ein Beispiel:

localhost # emerge --info
Portage 2.3.13 (python 3.5.4-final-0, default/linux/amd64/17.0/desktop, gcc-6.4.0, glibc-2.25-r9, 4.14.8-gentoo-r1 x86_64)
=================================================================
System uname: Linux-4.14.8-gentoo-r1-x86_64-AMD_A8-6600K_APU_with_Radeon-tm-_HD_Graphics-with-gentoo-2.4.1
KiB Mem: 11471324 total, 8150152 free
KiB Swap: 0 total, 0 free
Timestamp of repository gentoo: Sun, 07 Jan 2018 12:30:02 +0000
Head commit of repository gentoo: 358a51718a528645a890dbed23e37f3e8c8de4f0
sh bash 4.4_p12
ld GNU ld (Gentoo 2.29.1 p3) 2.29.1
app-shells/bash: 4.4_p12::gentoo
dev-lang/perl: 5.24.3::gentoo
dev-lang/python: 2.7.14-r1::gentoo, 3.5.4-r1::gentoo
dev-util/cmake: 3.9.6::gentoo
dev-util/pkgconfig: 0.29.2::gentoo
sys-apps/baselayout: 2.4.1-r2::gentoo
sys-apps/openrc: 0.34.11::gentoo
sys-apps/sandbox: 2.10-r4::gentoo
sys-devel/autoconf: 2.13::gentoo, 2.69-r4::gentoo
sys-devel/automake: 1.11.6-r2::gentoo, 1.15.1-r1::gentoo
sys-devel/binutils: 2.29.1-r1::gentoo
sys-devel/gcc: 6.4.0::gentoo
sys-devel/gcc-config: 1.8-r1::gentoo
sys-devel/libtool: 2.4.6-r3::gentoo
sys-devel/make: 4.2.1::gentoo
sys-kernel/linux-headers: 4.13::gentoo (virtual/os-headers)
sys-libs/glibc: 2.25-r9::gentoo
Repositories:

gentoo
location: /usr/portage
sync-type: rsync
sync-uri: rsync://rsync.gentoo.org/gentoo-portage
priority: -1000
sync-rsync-extra-opts:

ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="* -@EULA"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/chromium/policies/managed/chrome-gnome-shell.json /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/opt/chrome/policies/managed/chrome-gnome-shell.json /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -pipe"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/ rsync://mirror.eu.oneandone.net/gentoo/ http://mirror.netcologne.de/gentoo/ rsync://mirror.netcologne.de/gentoo/ rsync://ftp-stud.hs-esslingen.de/gentoo/"
LANG="de_DE.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
LINGUAS="de"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
PORTAGE_TMPDIR="/var/tmp"
USE="X a52 aac acl acpi alsa amd64 berkdb branding bzip2 cairo cdda cdr cli consolekit crypt cups cxx dbus dri dts dvd dvdr emboss encode exif fam firefox flac fortran gdbm gif glamor gpm gtk iconv ipv6 jpeg lcms ldap libnotify mad mng modules mp3 mp4 mpeg multilib ncurses nls nptl ogg opengl openmp pam pango pcre pdf png policykit ppds qt3support qt5 readline sdl seccomp spell ssl startup-notification svg systemd tcpd tiff truetype udev udisks unicode upower usb vorbis wxwidgets x264 xattr xcb xml xv xvid zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="efi-64 pc" INPUT_DEVICES="libinput keyboard mouse" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-6 php7-0" POSTGRES_TARGETS="postgres9_5" PYTHON_SINGLE_TARGET="python3_5" PYTHON_TARGETS="python2_7 python3_5" RUBY_TARGETS="ruby22" USERLAND="GNU" VIDEO_CARDS="amdgpu fbdev intel nouveau radeon radeonsi vesa dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset: CC, CPPFLAGS, CTARGET, CXX, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, MAKEOPTS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

Das Paketmanagment wird über das Paket portage verwaltet. Falls Portage selbst aktualisiert werden soll komnt folgende Melsung:

File list transfer time: 0.000 seconds
Total bytes sent: 33.01K
Total bytes received: 6.09M

sent 33.01K bytes received 6.09M bytes 489.45K bytes/sec
total size is 225.76M speedup is 36.90
=== Sync completed for gentoo
q: Updating ebuild cache in /usr/portage ...
q: Finished 37536 entries in 0.173774 seconds

* IMPORTANT: 16 news items need reading for repository 'gentoo'.
* Use eselect news read to view new items.

Action: sync for repo: gentoo, returned code = 0

* An update to portage is available. It is _highly_ recommended
 * that you update portage now, before any other packages are updated.

* To update portage, run 'emerge --oneshot portage' now.

Wie beschrieben mit emerge –oneshot portage eine Aktualisierung durchführen.

Falls folgende Meldung kommt:

* IMPORTANT: config file ‚/etc/portage/package.accept_keywords‘ needs updating.
* See the CONFIGURATION FILES and CONFIGURATION FILES UPDATE TOOLS
* sections of the emerge man page to learn how to update config files.

oder The following USE-Changes are necessary to proced

Muss über den Befehl etc-update die Konfigurationsdatei aktualisiert werden.

localhost /home/fridolin # etc-update
Scanning Configuration files...
The following is the list of files which need updating, each
configuration file is followed by a list of possible replacement files.
1) /etc/portage/package.accept_keywords (1)
Please select a file to edit by entering the corresponding number.
(don't use -3, -5, -7 or -9 if you're unsure what to do)
(-1 to exit) (-3 to auto merge all files)
(-5 to auto-merge AND not use 'mv -i')
(-7 to discard all updates)
(-9 to discard all updates AND not use 'rm -i'):

Die Nummer der Datei eingeben.

Dann werden die möglichen  Änderungen an der Datei angezeigt. Die Angabe von + bedeutet, dass diese Infos in der Datei /etc/portage/pakcage.use/iputils hinzugefügt werden.

Showing differences between /etc/portage/package.accept_keywords and /etc/portage/._cfg0000_package.accept_keywords
--- /var/tmp/etc-update-15139/symdiff-e0S/0 2018-01-09 08:04:23.090089631 +0000
+++ /etc/portage/._cfg0000_package.accept_keywords 2018-01-09 07:59:38.590087029 +0000
@@ -1 +1,12 @@
-/dev/null
+# required by media-libs/avidemux-plugins-2.6.20::gentoo[aac]
+# required by media-video/avidemux-2.6.20::gentoo
+# required by avidemux (argument)
+=media-libs/faac-1.29.9.2 ~amd64
+# required by media-video/avidemux-2.6.20::gentoo
+# required by media-libs/avidemux-plugins-2.6.20::gentoo
+=media-libs/avidemux-core-2.6.20-r2 ~amd64
+# required by media-video/avidemux-2.6.20::gentoo
+# required by avidemux (argument)
+=media-libs/avidemux-plugins-2.6.20 ~amd64
+# required by media-libs/avidemux-plugins-2.6.20::gentoo
+=media-video/avidemux-2.6.20 ~amd64>

etc-update

 
emerge –depclea-

Wenn Portage sagt: „masked by: missing keyword“ während des emergens, bedeutet es, das ein Paket für deine Architektur nicht verfügbar ist, z.B. wenn du ein amd64 System benutzt und das entsprechende Paket ist nur verfügbar für „x86“. Wenn du das Paket wirklich benötigst, kannst du folgendes versuchen:

    # echo "category/package amd64 ~amd64" >> /etc/portage/package.keywords

um die Einstellungen eines Pakets in einer Kategorie zu überlaufen.

Um ein maskiertes Paket unter Gentoo zu installieren, kannst du das Paket mit dem entsprechenden Schlüsselwort manuell akzeptieren. In deinem Fall ist das Schlüsselwort „~amd64“. Du kannst das Paket akzeptieren, indem du die ACCEPT_KEYWORDS-Umgebungsvariable vor dem Aufruf von emerge setzt. Hier ist wie du das machen kannst:

# ACCEPT_KEYWORDS="~amd64" emerge -av pcmanfm

Dieser Befehl sagt Portage, dass es Pakete mit dem Schlüsselwort „~amd64“ akzeptieren soll, was es ermöglicht, das maskierte Paket zu installieren. Nachdem du dies ausgeführt hast, sollte Gentoo das maskierte Paket herunterladen und installieren.

localhost /home/michi # emerge -av pcmanfm

 * IMPORTANT: 20 news items need reading for repository 'gentoo'.
 * Use eselect news read to view new items.


These are the packages that would be merged, in order:

Calculating dependencies... done!
Dependency resolution took 0.67 s (backtrack: 0/20).


!!! All ebuilds that could satisfy "pcmanfm" have been masked.
!!! One of the following masked packages is required to complete your request:
- x11-misc/pcmanfm-1.3.2-r1::gentoo (masked by: ~amd64 keyword)

For more information, see the MASKED PACKAGES section in the emerge
man page or refer to the Gentoo Handbook.

Ein Paket mit (fast) gleichem Namen – warum?

Die beiden Pakete app-office/libreoffice und app-office/libreoffice-bin sind verschiedene Varianten der LibreOffice-Suite, aber mit unterschiedlichen Installationstypen:

  1. app-office/libreoffice:
    • Beschreibung: Dieses Paket enthält die LibreOffice-Suite in Quellcodedateien. Wenn Sie dieses Paket installieren, werden die Quellcodedateien heruntergeladen und kompiliert, um LibreOffice auf Ihrem System einzurichten. Dies erfordert normalerweise mehr Zeit und Ressourcen, bietet jedoch Flexibilität bei der Anpassung und Konfiguration.
    • Lizenz: Die Lizenz für dieses Paket ist eine Kombination aus LGPL-3 (GNU Lesser General Public License 3) und MPL-1.1 (Mozilla Public License 1.1), was bedeutet, dass LibreOffice unter den Bedingungen einer oder sowohl dieser Lizenzen verwendet werden kann.
  2. app-office/libreoffice-bin:
    • Beschreibung: Dieses Paket enthält die vorkompilierte Version der LibreOffice-Suite. Wenn Sie dieses Paket installieren, wird LibreOffice in bereits kompilierter Form auf Ihrem System installiert. Dies ist schneller und erfordert weniger Ressourcen, bietet jedoch weniger Flexibilität bei der Anpassung und Konfiguration im Vergleich zur Quellcodeinstallation.
    • Lizenz: Die Lizenz für dieses Paket ist LGPL-3 (GNU Lesser General Public License 3).

Die Wahl zwischen libreoffice und libreoffice-bin hängt von Ihren Prioritäten ab. Wenn Ihnen Flexibilität und Anpassungsmöglichkeiten wichtig sind und Sie bereit sind, die Zeit für die Kompilierung aufzuwenden, können Sie libreoffice wählen. Wenn Ihnen hingegen Geschwindigkeit und Bequemlichkeit wichtiger sind und Sie keine speziellen Anpassungen benötigen, könnte libreoffice-bin die bessere Wahl sein.

In Bezug auf die Anwendungsleistung (z. B. Geschwindigkeit beim Öffnen von Dokumenten, Ausführen von Operationen usw.) gibt es normalerweise keinen Unterschied zwischen den beiden Versionen. Die Anwendungsleistung hängt eher von der spezifischen Implementierung und Optimierung der LibreOffice-Software ab, unabhängig davon, ob sie aus Quellcode oder vorkompiliertem Binärcode besteht.