Cuando quiero enumerar los paquetes instalados, lo hago generalmente de una de dos maneras.
La manera tradicional es usar rpm -qa | grep <whatever I look for>
, y eso es todo.
Pero recientemente quería una visualización más completa de mis paquetes y, en adelante, la usé dnf list --installed <whatever I look for>
.
Sin embargo, al mirar el resultado hay un par de cosas que no entiendo.
Considere este ejemplo:
# dnf list --installed zsh
Last metadata expiration check: 0:13:25 ago on Mon Jul 11 05:48:04 2016.
Installed Packages
zsh.x86_64 5.2-5.fc24 @@commandline
(los espacios en la impresión real son más amplios)
Entonces las entradas resultantes son: «paquete» «versión» «repo».
En mi ejemplo eso es:
- paquete: zsh.x86_64
- versión: 5.2-5.fc24
- repo: @@ línea de comando
Hasta ahora, la tabla resultante es comprensible, pero estoy confundido sobre lo que significan las dos '@@' delante del nombre del repositorio.
Además, "línea de comandos" sugiere que el paquete se instaló desde la línea de comandos (descargando el RPM, y luego haciendo dnf install whatever.rpm
en la línea de comando , etc.). Sin embargo, estoy bastante seguro de que he instalado a zsh
través de dnf install zsh
.
Pero eso no es todo.
Tengo varios paquetes en mi sistema instalado desde el repositorio @System
, @fedora
(sin embargo hay también fedora
sin el @
) y cosas así @@commandline
.
Entonces, ¿qué significa eso @
o @@
exactamente delante del nombre del repositorio?
¿Y por qué tengo tantos paquetes destacados instalados @@commandline
aunque estoy más que seguro de haberlos instalado desde los repositorios?
fuente
dnf
es increíblemente silenciosa sobre esto. Supongamos que '@' denota un paquete instalado, ¿significa '@@' que significa que se instaló manualmente desde una fuente que no sea repositorio, tal vez? Realmente desearía que alguien lo aclarara.(Descargo de responsabilidad: no puedo proporcionar fuentes para nada de esto, porque nunca he visto ninguna documentación que realmente discuta estas cosas. La información a seguir es simplemente lo que he podido averiguar a través de la inspección, la experimentación de blackbox, al azar prueba y error, y simples conjeturas antiguas. Además, una advertencia justa, es sobreexpositoria hasta el punto de ser muuuuucho demasiado tiempo).
DNF añade un @ para denotar la cesión temporal de un instalado el paquete se instaló a partir , en el
dnf list
contexto. Como notaste:Pero en realidad, nunca verá ningún paquete proveniente de
fedora
la lista instalada , ya que cada paquete muestra algunos @ -repo como su fuente. (Puede verificarlo ejecutandosudo dnf list installed
e inspeccionando; no hay repositorios listados sin al menos un signo @). Cuando vea la información de un paquete condnf info
, elFrom repo:
campo " " mostrará ese nombre de repositorio sin el@
. (Entonces "From repo: fedora
" es absolutamente posible, y equivalente a@fedora
en la lista instalada).Pero algunos repos se nombran con un
@
signo en el frente. Como JohnKoch descubrió en las fuentes de Hawkey, "@commandline" se define como el "nombre del repositorio" para "el repositorio de la línea de comandos". Entonces,@@commandline
en eldnf list
listado simplemente indica un paquete instaladoFrom repo: @commandline
, un repositorio que confusamente recibió un nombre que comienza con su propio @ -sign.dnf info
en cualquier paquete instalado se mostraráRepository: @System
, que es el@
repositorio virtual con otro nombre. Parece que@System
es el repositorio virtual que contiene el conjunto de paquetes instalados actualmente, y@commandline
el repositorio de origen virtual de donde vino un paquete, cuando no provenía de ningún repositorio.El significado de
@commandline
y@System
, y su relación entre ellos, parece haber cambiado desde la primera vez que escribí esta respuesta. De alguna manera es más consistente y aborda algunas de mis objeciones anteriores sobre cómo@commandline
se usa. Ya no veo ningún paquete instalado listado como de origen@@System
, y las instalaciones fuera de banda ahora se mostraránFrom repo: @commandline
(@@commandline
en el contexto de la lista).dnf info
en un paquete instalado fuera de banda generalmente muestra algo como lo siguiente:Si hago un
dnf reinstall remi-release
(porque el paquete está en elremi
repositorio), cambia a:Otra cosa sobre los repositorios de origen: los repositorios enumerados en el
From repo:
campo siempre son repositorios que existen en el contexto de repositorio actual . En otras palabras, la fuente de instalación de un paquete no es simplemente una cadena que contiene el nombre del repositorio; los paquetes instalados están vinculados a la identidad del repositorio proveedor tal como existe (o existió) en el sistema.Como la mayoría de los repos están versionados en distro, se redefinen con cada nueva versión de Fedora. (Por ejemplo, el "
fedora
" repositorio se convierte en el conjunto de paquetes que componen la nueva versión, un repositorio completamente diferente del "fedora
" que existía en la versión anterior). Entonces, cada vez que se realiza una actualización del sistema, muchas identidades de repositorio antiguas ser invalidadoDNF (o hawkey) utilizado para relegar paquetes instalados desde repos que ya no existen
@commandline
como repositorio de origen. Digo "solía", porque eso (afortunadamente) ya no se hace. Los paquetes instalados que provienen de un repositorio que ya no existe ya no mostrarán su fuente como@@commandline
/From repo: @commandline
. De hecho,dnf info
muestra que ya no tienen ningún repositorio fuente. Por ejemplo,sitecopy
fue un paquete de Fedora que desde entonces ha sido retirado. Lo instalé desde las versionesfedora
oupdates
repo 7 u 8, y todavía lo tengo instalado:No hay "
From repo:
" en la lista.Esto significa de manera confusa que
dnf list installed
mostrará ese paquete (y otros similares) con@System
(uno@
) al lado. Entonces, en cierto sentido, solo hemos cambiado una inconsistencia por otra, ya que esa columna ya no es siempre el repositorio de origen con@
antepuesto. Aún así, prefiero el estado actual de las cosas.Notas al pie
(a veces se muestra. "Los paquetes disponibles" no se mostrarán necesariamente en cada
dnf list
ejecución: si la versión instalada de un paquete es la mejor versión disponible, aparece en "Paquetes instalados" sería redundante incluirlo también en "Paquetes disponibles". El uso--showduplicates
forzará una sección de "Paquetes disponibles" que incluye todas las instancias conocidas, independientemente de la versión, ya sea instalada o descargable).fuente