User:raraneda/wiki/Equery

From Gentoo Wiki
Jump to:navigation Jump to:search

Resources


equery es una herramienta para hacer muchas operaciones comunes de Portage en forma simple. Entre otras operaciones, puede desplegar dependencias de paquetes, metadata y archivos instalados.

Instalación

En breve:

root #emerge --ask app-portage/gentoolkit

Equery es parte de un set de herramientas instalada con el paquete app-portage/gentoolkit. Para información referente a como instalar equery u otra herramienta visita el articulo Gentoolkit .

Usos

Introducción

equery Es una herramienta que despliega información bastante util sobre paquetes instalados en el sistema. equery está basado en un sistema modular. Cada módulo tiene un nombre abreviado. Por ejemplo, ejecutando equery l gcc es lo mismo que ejecutar equery list gcc. Invocando la opción --help (equery --help) esta arrojará las opciones globales y listará todos los módulos disponibles con su correspondiente nombre abreviado. Agregando el nombre del módulo al final(equery --help module) se mostrará la ayuda específica para el modulo. Por último, ejecutando man equery también proporcionará una explicación detallada de todos los módulos y opciones disponibles, junto con algunos ejemplos útiles.

A continuación se muestra una lista de características que funcionan sobre la mayoría de los módulos.

user $equery --quiet list gcc
sys-devel/gcc-4.3.2-r3
user $equery --quiet list sys-devel/gcc
sys-devel/gcc-4.3.2-r3
user $equery --quiet list '>=sys-devel/gcc-4'
sys-devel/gcc-4.3.2-r3

Como emerge, equery no entiende los nombres parciales de los paquetes:

user $equery check zilla
!!! No package found matching zilla

Por el contrario a emerge, equery puede aceptar formato de expansión de comodines (Globbing) tipo shell en la categoría y/o nombre del paquete:

user $equery check '*zilla*'
 * Checking www-client/mozilla-firefox-3.0.14 ...
    90 out of 90 files passed
user $equery check www-c*/*
 * Checking www-client/links-2.2 ...
   30 out of 30 files passed
 * Checking www-client/mozilla-firefox-3.0.14 ...
   90 out of 90 files passed

Muchos módulos de equery toman múltiples entradas:

user $equery hasuse sse sse2
 * Searching for USE flag sse ...
[IP-] [  ] media-libs/flac-1.2.1-r3 (0)
[IP-] [  ] media-libs/speex-1.2_beta3_p2 (0)
  
 * Searching for USE flag sse2 ...
[IP-] [  ] dev-libs/openssl-0.9.8k (0)
[IP-] [  ] x11-libs/pixman-0.16.0 (0)

Algunos módulos también permiten expresiones regulares en forma completa:

user $equery -q list --portage-tree --full-regex '[kr]?flickr.*'
dev-dotnet/flickrnet-bin-2.2
dev-ruby/flickr-1.0.2-r1
dev-ruby/flickr-1.0.2-r2
dev-ruby/rflickr-20060201
media-gfx/kflickr-0.6
[...]
Note
El soporte a Globbing reemplaza un número de viejas opciones en equery. Por ejemplo, para actuar en todos los paquetes en un determinado conjunto, usa un '*' (asterisco). Para actuar en todos los paquetes en una categoría, usa 'category-name/*'.
Warning
No olvides usar comillas cuando ocupes caracteres especiales como asterisco o los símbolos mayor o menor que.

Las siguientes secciones de este documento ofrecen una rápida introducción a los diferentes módulos de equery.

Capacidades

Para mirar una lista de todas las capacidades de equery, simplemente ejecútalo sin argumentos:

user $equery
Gentoo package query tool
Usage: equery [global-options] module-name [module-options]
 
modules (short name)
 (b)elongs               list what package FILES belong to
 (c)hanges               list changelog entries for ATOM
 chec(k)                 verify checksums and timestamps for PKG
 (d)epends               list all packages directly depending on ATOM
 dep(g)raph              display a tree of all dependencies for PKG
 (f)iles                 list all files installed by PKG
 h(a)s                   list all packages for matching ENVIRONMENT data stored in /var/db/pkg
 (h)asuse                list all packages that have USE flag
 ke(y)words              display keywords for specified PKG
 (l)ist                  list package matching PKG
 (m)eta                  display metadata about PKG
 (s)ize                  display total size of all files owned by PKG
 (u)ses                  display USE flags for PKG
 (w)hich                 print full path to ebuild for PKG

Alias

Un buen acercamiento para trabajar con equery es creando alias. Cuando usamos bash estas pueden ser incorporadas en el archivo ~/.bashrc:

FILE ~/.bashrc
alias eqf='equery f'
alias equ='equery u'
alias eqh='equery h'
alias eqa='equery a'
alias eqb='equery b'
alias eql='equery l'
alias eqd='equery d'
alias eqg='equery g'
alias eqc='equery c'
alias eqk='equery k'
alias eqm='equery m'
alias eqy='equery y'
alias eqs='equery s'
alias eqw='equery w'

Encontrando el paquete al cual pertenece un archivo con belongs (b)

user $equery belongs -e /usr/bin/glxgears
 * Searching for /usr/bin/glxgears ...
 x11-apps/mesa-progs-7.5.1 (/usr/bin/glxgears)

belongs Puede buscar por archivos en base a una expresión regular con la opción -f. La opción -e para la búsqueda después de que encuentre la primera. Debido a que ningún archivo debe ser parte de dos paquetes esta opción se considera segura.

Una corta versión de belongs (b) puede también ser usada. Por ejemplo, para listar el paquete al que pertenece equery:

user $equery b equery
 * Searching for equery ... 
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib/python-exec/python2.7/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python3.3/site-packages/gentoolkit/test/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/bin/equery -> ../lib/python-exec/python-exec2)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python2.7/site-packages/gentoolkit/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib/python-exec/python3.3/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python2.7/site-packages/gentoolkit/test/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python3.3/site-packages/gentoolkit/equery)

Viendo los cambios en ChangeLog con changes (c)

changes Permite al usuario ver las entradas de ChangeLog para la versión de un paquete o un grupo de versiones. Imagine después de ejecutar emerge --sync Portage imprime un mensaje indicando que va a ser actualizado. Para ver que cambió puedes usar este comando:

user $equery changes portage
*portage-2.1.6.13 (03 May 2009)
  
  03 May 2009; Zac Medico <zmedico@gentoo.org> +portage-2.1.6.13.ebuild:
  2.1.6.13 bump. This fixes bug #268398 (document econf automatic die)
  and bug #267104 (handle insufficient space interaction with userfetch).
  Bug #268228 tracks all bugs fixed since 2.1.6.11.

Verificando la integridad de los paquetes con check (k)

A veces es muy util para verificar la integridad de los paquetes. equery puede verificar sumas MD5 así como las marcas de tiempo para indicar cuándo un paquete pudo haber sido corrompido, reemplazado o eliminado.

user $equery check gentoolkit
 * Checking app-portage/gentoolkit-0.3.0_rc7 ...
   71 out of 71 files passed

Listando todos los paquetes que dependen de un paquete específico con depends (d)

¿Alguna vez se preguntó por que un determinado paquete se instaló en el sistema? equery puede decir que paquetes y listarlos con depends. Incluye dependencias indirectas con la opción -D.

user $equery depends pygtk
 * Searching for pygtk ...
app-admin/pessulus-2.24.0 (>=dev-python/pygtk-2.6.0)
app-editors/gedit-2.24.3 (python ? >=dev-python/pygtk-2.12)
dev-libs/libgweather-2.24.3 (python ? >=dev-python/pygtk-2)
dev-python/gnome-python-base-2.22.3 (>=dev-python/pygtk-2.10.3)
dev-python/gnome-python-desktop-base-2.24.1 (>=dev-python/pygtk-2.10.3)
[...]

Un segundo ejemplo lista todos los paquetes dependiendo de udev:

user $equery d udev
sys-auth/consolekit-0.4.5_p20120320 (acl ? >=sys-fs/udev-146-r1)
sys-fs/cryptsetup-1.4.1 (>=sys-fs/udev-124)
                        (>=sys-fs/udev-182[static-libs])
                        (<=sys-fs/udev-171-r6)
sys-fs/lvm2-2.02.88 (>=sys-fs/udev-151-r4)
virtual/dev-manager-0 (sys-fs/udev)
x11-libs/cairo-1.10.2-r2 (drm ? >=sys-fs/udev-136)

Obtener gráficos de dependencia con depgraph (g)

depgraph es lo opuesto a depends. Este encontrará todos los ebuilds del que depende este paquete (no los ebuilds que dependan de este paquete). Cuando este encuentra una dependencia, este buscará recursivamente esas dependencias del paquete. Controla la profundidad del arbol con la opción --depth.

user $equery depgraph mozilla-firefox
 * Searching for mozilla-firefox ...
 * dependency graph for www-client/mozilla-firefox-2.0.0.19:
`-- www-client/mozilla-firefox-2.0.0.19
 `-- virtual/jre-1.6.0 (virtual/jre) [java]
  `-- virtual/jdk-1.6.0 (virtual/jdk-1.6.0*)
  `-- dev-java/icedtea6-bin (unable to resolve: package masked or removed)
   `-- dev-java/sun-jdk-1.6.0.15
    `-- dev-java/java-sdk-docs-1.6.0.10 [doc]
     `-- app-arch/unzip-6.0-r1
      `-- app-arch/bzip2-1.0.5-r1 [bzip2]
    `-- sys-libs/glibc-2.9_p20081201-r2
     `-- sys-devel/gettext-0.17 [nls]
      `-- virtual/libiconv-0 (virtual/libiconv)
[...]

Nota como jre es una dependencia directa y jdk es una dependencia indirecta si el USE java es usado?

Listando archivos instalados por un paquete con files (f)

equery puede listar todos los archivos instalados por un ebuild con el módulo files. Intenta --tree para obtener una fácil lectura del directorio. Usa --filter para solo encontrar un cierto tipo de archivo. Por ejemplo, para encontrar donde los ejecutables son instalados usa --filter=cmd, o para rapidamente encontrar el lugar de los archivo de configuración intenta --filter=conf.

user $equery files --tree gentoolkit
 * Searching for gentoolkit ...
 * Contents of app-portage/gentoolkit-0.3.0_rc7:
 /etc
   > /eclean
      + distfiles.exclude
      + packages.exclude
   > /env.d
      + 99gentoolkit-env
   > /revdep-rebuild
      + 99revdep-rebuild
 /usr
   > /bin
      + eclean
      + eclean-dist -> eclean
      + eclean-pkg -> eclean
      + epkginfo
      + equery
      + eread
      + euse
      + glsa-check
      + revdep-rebuild
   > /lib
      > /python2.6
         > /site-packages
            > /gentoolkit
            + gentoolkit-0.3.0_rc7-py2.6.egg-info
               + __init__.py
               > /equery
                  + __init__.py
                  + belongs.py
                  + changes.py
                  + check.py
                  + depends.py
                  + depgraph.py
                  + files.py
[...]

Otro ejemplo, para listar todos los módulos por ncmpcpp:

user $equery f ncmpcpp
 * Searching for ncmpcpp ...
 * Contents of media-sound/ncmpcpp-0.5.10:
/usr
/usr/bin
/usr/bin/ncmpcpp
/usr/share
/usr/share/bash-completion
/usr/share/bash-completion/ncmpcpp
/usr/share/doc
/usr/share/doc/ncmpcpp-0.5.10
/usr/share/doc/ncmpcpp-0.5.10/AUTHORS.bz2
/usr/share/doc/ncmpcpp-0.5.10/NEWS.bz2
/usr/share/doc/ncmpcpp-0.5.10/config.bz2
/usr/share/doc/ncmpcpp-0.5.10/keys.bz2
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/ncmpcpp.1.bz2

Descripciones de otros módulos y comandos adicionales pueden ser encontrados en el equery man page (man equery).

Buscando por paquetes que tengan un USE específico con hasuse (h)

hasuse Puede ser usado para encontrar paquetes con un parámetro USE específico. hasuse no indicará si el parámetro está habilitado, solo si el ebuild listado tiene esta como una opción. mira la sección de EJEMPLOS de hasuse en la página del manual de equery para más datos sobre este tipo de información.

user $equery hasuse qt3 qt4
 * Searching for USE flag qt3 ...
[IP-] [  ] app-crypt/pinentry-0.7.5 (0)
[IP-] [  ] net-dns/avahi-0.6.24-r2 (0)
[IP-] [  ] net-wireless/wpa_supplicant-0.6.9 (0)
  
 * Searching for USE flag qt4 ...
[IP-] [  ] net-dns/avahi-0.6.24-r2 (0)
[IP-] [  ] net-wireless/wpa_supplicant-0.6.9 (0)

Listando paquetes con list (l)

list es un simple, pero poderoso módulo para listar paquete que están instalados, en el árbol de Portage o en un overlay.

user $equery list '*'
 * Searching for * ...
[IP-] [  ] app-admin/eselect-1.2.3 (0)
[IP-] [  ] app-admin/eselect-ctags-1.10 (0)
[IP-] [  ] app-admin/eselect-esd-20060719 (0)
[IP-] [  ] app-admin/eselect-fontconfig-1.0 (0)
[IP-] [  ] app-admin/eselect-opengl-1.0.8-r1 (0)
[IP-] [  ] app-admin/eselect-python-20090824 (0)
[IP-] [  ] app-admin/eselect-ruby-20081227 (0)
[IP-] [  ] app-admin/eselect-vi-1.1.5 (0)
[IP-] [  ] app-admin/perl-cleaner-1.05 (0)
[IP-] [  ] app-admin/pessulus-2.24.0 (0)
[IP-] [  ] app-admin/python-updater-0.7 (0)
[IP-] [  ] app-admin/sudo-1.7.2_p1 (0)
[...]

La consulta estándar buscará paquetes instalados para un nombre de paquete dado. Escribiendo el '*' mostrará todos los paquetes. En el campo de la izquierda is posible ver todos los paquetes que están I(nstalados) y desde el arbol P(portage). No están masked (el segundo campos está en blanco), y todo están instalados en el espacio por defecto (0).


Use opción local para mirar paquetes en el árbol de Portage y overlays.

user $equery list -po vim
 * Searching for vim ...
[-P-] [  ] app-editors/vim-7.0.235 (0)
[-P-] [ ~] app-editors/vim-7.0.243 (0)
[-P-] [  ] app-editors/vim-7.1.123 (0)
[-P-] [ ~] app-editors/vim-7.1.330 (0)
[-P-] [  ] app-editors/vim-7.2 (0)
[-P-] [ ~] app-editors/vim-7.2.108 (0)
[IP-] [  ] app-editors/vim-7.2.182 (0)
[-P-] [ ~] app-editors/vim-7.2.238 (0)
[-P-] [ ~] app-editors/vim-7.2.264 (0)

En este es posible mirar que la versión 7.2.182 está instalada y no hay versiones disponibles de un overlay.

Users can see which versions are keyword masked by the ~ in the second field. 

Viendo la metadata de los paquetes con meta (m)

Cada paquete en el árbol de Portage provee al menos algún metadata acerca del mantenedor, grupo, etc. La cantidad de información util depende de lo que decidan proveer los mantenedores del paquete. Sin opciones, meta</meta> retornará alguna información util.

user $equery meta gnucash
 * app-office/gnucash [gentoo]
 Herd:        gnome-office (gnome-office@gentoo.org)
 Maintainer:  tove@gentoo.org (Torsten Veller)
 Upstream:    None specified
 Location:    /usr/portage/app-office/gnucash
 Keywords:    2.2.9-r1:0: alpha amd64 ppc sparc x86
 Keywords:    2.2.9-r2:0:
 Keywords:    2.3.8:0:
 Keywords:    2.3.10:0: ~alpha ~amd64 ~ppc ~sparc ~x86

Algunos mantenedores proporcionan información adicional que resulta ser muy util:

user $equery meta --description emacs
 * app-editors/emacs
  GNU Emacs is an extensible, customizable text editor - and more. At its core
  is an interpreter for Emacs Lisp, a dialect of the Lisp programming language
  with extensions to support text editing. The features of GNU Emacs include:
   * Content-sensitive editing modes, including syntax coloring, for a wide
     variety of file types including plain text, source code, and HTML.
   * Complete built-in documentation, including a tutorial for new users.
   * Support for many languages and their scripts, including all the European
     "Latin" scripts, Russian, Greek, Japanese, Chinese, Korean, Thai,
     Vietnamese, Lao, Ethiopian, and some Indian scripts.
   * Highly customizable, using Emacs Lisp code or a graphical customization
     interface.
   * A large number of extensions that add other functionality, including a
     project planner, mail and news reader, debugger interface, calendar, and
     more. Many of these extensions are distributed with GNU Emacs; others are
     available separately.

Encontrando el tamaño de los paquetes con size (s)

Te haz sentido curioso por encontrar cuanto espacio está ocupando un paquete específico? Dado que un paquete puede tener sus archivos a través de una serie de directorios, el usual comando du -hc podría no dar la cifra correcta. No te preocupes, equery al rescate!

user $equery size openoffice-bin
 * app-office/openoffice-bin-3.1.1
         Total files : 4624
         Total size  : 361.38 MiB

Usando size imprime el espacio total usado en unidades legible por humanos y lista el número total de archivos que tiene el paquete. Para obtener el tamaño total en bytes usa --bytes.

Listando por-paquetes los parámetros USE con uses (u)

El módulo uses de equery puede brindar información sobre que parámetros USE están disponibles para un específico paquete y cual de estos está actualmente habilitado.

user $equery uses gst-plugins-meta
 * Searching for gst-plugins-meta ...
[ Legend : U - flag is set in make.conf       ]
[        : I - package is installed with flag ]
[ Colors : set, unset                         ]
 * Found these USE flags for media-plugins/gst-plugins-meta-0.10-r2:
 U I
 + + X      : Adds support for X11
 - - a52    : Enables support for decoding ATSC A/52 streams used in DVD
 + + alsa   : Adds support for media-libs/alsa-lib (Advanced Linux Sound
              Architecture)
 - - dvb    : Adds support for DVB (Digital Video Broadcasting)
 + + dvd    : Adds support for DVDs
 + + esd    : Adds support for media-sound/esound (Enlightened Sound Daemon)
 + + ffmpeg : Enable ffmpeg-based audio/video codec support
 + + flac   : Adds support for FLAC: Free Lossless Audio Codec
 - - mad    : Adds support for mad (high-quality mp3 decoder library and cli
              frontend)
 + + mpeg   : Adds libmpeg3 support to various packages
 - - mythtv : Support for retrieval from media-tv/mythtv backend
 + + ogg    : Adds support for the Ogg container format (commonly used by
              Vorbis, Theora and flac)
 - - oss    : Adds support for OSS (Open Sound System)
 + + theora : Adds support for the Theora Video Compression Codec
 + + vorbis : Adds support for the OggVorbis audio codec
 - - xv     : Adds in optional support for the Xvideo extension (an X API for
              video playback)

Aquí un número de parámetros USE que están habilitados en un meta-paquete del plugin de gstreamer, pero se puede ver que hay otros parámetros USE disponible. Para más información sobre los parámetros USE, por favor dirígete al capítulo USE Flags del Gentoo Handbook.


Encontrando la ruta del ebuild con which (w)

which es un script simple para ayudar a los usuarios a encontrar en forma rápida la ruta de un ebuild. Si el nombre de un paquete no versionado es pasado a which>/code> este retornará la nueva ruta del ebuild instalable. En otras palabras, devolvería el ebuild que Portage usaría si emerge example/package fuera escrito. which también acepta un paquete versionado para obtener la ruta a ese ebuild.

user $equery which gnome
/usr/portage/gnome-base/gnome/gnome-2.26.3.ebuild

Por último, si ninguno de las características mostradas de equery te han dado una respuesta, intenta usando which para buscar manualmente un ebuild con programas como tt>cat, less o grep:

user $grep HOMEPAGE $(equery which gentoolkit)
HOMEPAGE="http://www.gentoo.org/proj/en/portage/tools/index.xml"
Warning
Tenga en cuenta que equery actualmente cambia el formato de la salida si es enviada a través de una pipa. El formato a través de pipa está destinado a ser fácil para manipular por herramientas, but se puede desactivar agregando la opción --no-pipe. Cuando escribamos scripts que utilicen equery currently changes the format of the output if it is sent through a pipe. The piped format is intended to be easier to parse by tools, but it can be turned off by adding the --no-pipe option. When writing scripts that employ equery recuerda este comportamiento.

Lee también