Esto es una funcionalidad genial que acabo de descubrir en Debian. Es posible determinar de forma precisa cual es el paquete que provee a un determinado archivo.

Un problema que tuve recientemente en una instalación de Debian, fue la ausencia de un determinado archivo. Es decir, conocía exactamente qué archivo me estaba faltando, pero no sabía qué paquete debía instalar para obtenerlo. En estas situaciones es cuando los gestores de paquetes son realmente útiles.



Existe una herramienta, llamada apt-file, que tiene la capacidad de buscar archivos en paquetes para el gestor APT. Lógicamente no busca sólo en los paquetes instalados (para ello utilizaríamos find), sino que busca en todos los paquetes disponibles, realizando consultas sobre los repositorios configurados actualmente en el gestor APT.

Esto puede ser muy útil de diferentes formas. Ya les comenté el caso en el que necesité saber qué paquete instalar para proveer un archivo que me estaba faltando. Pero se me ocurren otros escenarios, como por ejemplo saber qué paquete instaló un archivo del cual no conozco su procedencia, recuperar un archivo de configuración que borré accidentalmente, saber si un archivo es provisto por un paquete o fue creado por un usuario (aunque para esto no es del todo preciso ya que los archivos que provee un paquete pueden cambiar en diferentes versiones), etc.

Para instalar apt-file en Debian ejecutar:

sudo apt-get install apt-file

Antes de poder utilizarlo es necesario actualizar la base de datos de paquetes desde los repositorios (sources), ejecutando:

sudo apt-file update

Ahora sí es posible determinar qué paquete provee a un determinado archivo. Es posible especificar un nombre de archivo sin la ruta, un patrón, o un nombre de archivo con la ruta completa.

Algunos ejemplos:

root@ubuntu:~# apt-file search my.cnf
mysql-common: /etc/mysql/my.cnf
mysql-testsuite-5.5: /usr/lib/mysql-testsuite/include/default_my.cnf
mysql-testsuite-5.5: /usr/lib/mysql-testsuite/suite/federated/my.cnf
mysql-testsuite-5.5: /usr/lib/mysql-testsuite/suite/rpl/my.cnf
tango-db: /usr/share/tango-db/my.cnf
root@ubuntu:~# apt-file search ssh-agent
aide-common: /usr/share/aide/config/aide/aide.conf.d/31_aide_ssh-agent
manpages-cs: /usr/share/man/cs/man1/ssh-agent.1.gz
openssh-client: /usr/bin/ssh-agent
openssh-client: /usr/share/man/man1/ssh-agent.1.gz
x11-common: /etc/X11/Xsession.d/90x11-common_ssh-agent
yash: /usr/share/yash/completion/ssh-agent
root@ubuntu:~# apt-file search /etc/init.d/openvpn
openvpn: /etc/init.d/openvpn

Para no ser menos que los debianitas, quise saber cómo realizar la misma tarea en CentOS, y afortunadamente yum provee la misma funcionalidad a través del comando provides:

[emi@hal9000 ~]$ yum provides /etc/init.d/openvpn
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security
Determining fastest mirrors
 * base: centos.mirror.mendoza-conicet.gob.ar
 * contrib: centos.chi.host-engine.com
 * epel: epel.gtdinternet.com
 * extras: centos.mirror.mendoza-conicet.gob.ar
 * rpmforge: apt.sw.be
google-chrome                                                                                                     3/3
spice                                                                                                           24/24
2259 packages excluded due to repository priority protections
openvpn-2.3.2-2.el6.x86_64 : A full-featured SSL VPN solution
Repo        : installed
Matched from:
Other       : Provides-match: /etc/init.d/openvpn



La única diferencia con Debian, es que para buscar patrones o nombres de archivo sin la ruta absoluta es necesario utilizar wildcards (comodines, *), por ejemplo:

[emi@hal9000 ~]$ yum provides *my.cnf
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security
Loading mirror speeds from cached hostfile                             
 * base: centos.mirror.mendoza-conicet.gob.ar                          
 * contrib: centos.chi.host-engine.com                                 
 * epel: epel.gtdinternet.com                                          
 * extras: centos.mirror.mendoza-conicet.gob.ar                        
 * rpmforge: apt.sw.be                                                 
2259 packages excluded due to repository priority protections          
epel/filelists_db                                                                              | 8.7 MB     00:05     
google-chrome/filelists                                                                        | 1.4 kB     00:00     
rpmforge/filelists_db                                                                          | 2.3 MB     00:00     
updates/filelists_db                                                                           | 2.2 MB     00:23     
mysql-libs-5.1.71-1.el6.x86_64 : The shared libraries required for MySQL clients                                      
Repo        : base                                                                                                    
Matched from:                                                                                                         
Filename    : /etc/my.cnf                                                                                             



mysql-libs-5.1.71-1.el6.i686 : The shared libraries required for MySQL clients
Repo        : base                                                            
Matched from:                                                                 
Filename    : /etc/my.cnf                                                     



mysql-test-5.1.71-1.el6.x86_64 : The test suite distributed with MySQL
Repo        : base                                                    
Matched from:                                                         
Filename    : /usr/share/mysql-test/suite/rpl_ndb/my.cnf              
Filename    : /usr/share/mysql-test/suite/ndb/my.cnf                  
Filename    : /usr/share/mysql-test/suite/rpl/my.cnf                  
Filename    : /usr/share/mysql-test/include/default_my.cnf            
Filename    : /usr/share/mysql-test/suite/federated/my.cnf            



mysql-test-5.1.73-3.el6_5.x86_64 : The test suite distributed with MySQL
Repo        : updates                                                   
Matched from:                                                           
Filename    : /usr/share/mysql-test/suite/rpl_ndb/my.cnf                
Filename    : /usr/share/mysql-test/suite/ndb/my.cnf                    
Filename    : /usr/share/mysql-test/suite/rpl/my.cnf                    
Filename    : /usr/share/mysql-test/include/default_my.cnf              
Filename    : /usr/share/mysql-test/suite/federated/my.cnf              



mysql-libs-5.1.73-3.el6_5.i686 : The shared libraries required for MySQL clients
Repo        : updates
Matched from:
Filename    : /etc/my.cnf



mysql-libs-5.1.73-3.el6_5.x86_64 : The shared libraries required for MySQL clients
Repo        : updates
Matched from:
Filename    : /etc/my.cnf



mysql-libs-5.1.73-3.el6_5.x86_64 : The shared libraries required for MySQL clients
Repo        : installed
Matched from:
Filename    : /etc/my.cnf



Para otras distribuciones, revisar el artículo Gestión de paquetes en cualquier distribución.

Espero que sea útil.


Tal vez pueda interesarte


Compartí este artículo