Informieren Sie sich in Gentoo über die Konfigurations- / Kompilierungsoptionen eines Pakets

7

Wie kann ich auf einer Gentoo Linux-Box, die ich nicht verwalte (und auf die ich keinen Root-Zugriff habe), die Optionen herausfinden, die zum Kompilieren des Pakets verwendet wurden?

(Bitte beachten Sie, dass ich noch nie mit Gentoo gearbeitet habe, aber gute Kenntnisse über Debian-basierte Distributionen habe.)

andreas-h
quelle
Die Antwort von Noisebleed ist die richtige Antwort.
MattBianco

Antworten:

1

Wenn der Portage-Paket-Manager verwendet wird (was höchstwahrscheinlich der Fall ist), befinden sich die CPU-Flags in /etc/make.confas CFLAGSund CXXFLAGS. Beachten Sie, dass einzelne Ebuilds möglicherweise bestimmte Flags filtern, sodass die Flags, die Sie sehen, /etc/make.confmöglicherweise nicht die sind, die zum Kompilieren des Pakets verwendet wurden. Wenn Sie sich das Ebuild (unter /usr/portage/<category name>/<program name>/) ansehen , können Sie feststellen, ob dies der Fall ist.

Dies setzt natürlich voraus, dass der Inhalt von /etc/make.confnach der Kompilierung des Pakets nicht geändert wurde.

Lars Kotthoff
quelle
/etc/make.confspiegelt möglicherweise nicht die Optionen wider, die bei der Installation des Pakets verwendet wurden. Siehe meine Antwort.
Noisebleed
9

Bitte beachten Sie, dass sich die aktuellen USE-Flags und andere in definierte Konfigurationen /etc/make.confseit der Installation des Pakets möglicherweise geändert haben. Eine zuverlässigere Methode zum Überprüfen der Konfigurations- und Kompilierungsoptionen ist das Überprüfen var/db/pkg.

Beispiel für Apache-2.2.22:

$ cat /var/db/pkg/www-servers/apache-2.2.22-r1/CFLAGS
-mtune=native -O2 -pipe -g
Geräuschbluten
quelle
3

Es ist wichtig zu beachten, dass dies überhaupt make.confnicht zuverlässig ist, um zu überprüfen, wie ein Paket kompiliert wird. Tatsächlich ist es nur eine der zusätzlichen Konfigurationsdateien in einer ganzen Liste.

Aus dem man make.conf:

USE_ORDER = "env:pkg:conf:defaults:pkginternal:repo:env.d"
Determines the precedence of layers in the incremental stacking of the USE 
variable. Precedence decreases from left to right such that env overrides 
pkg, pkg overrides conf, and so forth.

Die Priorität wird also wie folgt behandelt:

  1. Shell-Umgebung beim Aufrufen entstehen
  2. Paketspezifische USE-Einstellung in /etc/portage/package.use
  3. make.conf
  4. Standardwerte aus dem ausgewählten Profil
  5. In der Paketdatei festgelegte .ebuildStandardeinstellungen
  6. Verteilungsstandards
  7. In /etc/env.d definierte Einstellungen

Grundsätzlich können also USE-Flags gesetzt werden, ohne dass dies erwähnt wird make.conf. Ebenso für CFLAGS (obwohl ihre Reihenfolge der Verarbeitung festgelegt ist, aber es funktioniert ähnlich)

Ebenso können USE-Flags in einem Profil ohne E-Build oder andere oben genannte Quellen maskiert werden. Kurz gesagt, basierend auf Konfigurationsdateien können Sie nicht.

Wenn Sie die resultierenden globalen Einstellungen kennen möchten, die derzeit vom System verwendet werden, verwenden Sie emerge --info. Dies sollte Ihnen eine Menge Details geben. Normalerweise werden CFLAGS für ein einzelnes Paket nicht sehr oft überschrieben, sodass Sie diese Ausgabe als endgültig betrachten können.

Wenn Sie die USE-Flags eines bestimmten installierten Pakets kennen möchten, können Sie diese verwenden equery u <package>, sofern das gentoolkit- Paket installiert ist.

Tim
quelle