GNU/Linux >> Tutoriales Linux >  >> Fedora

Fedora:¿cómo replicar la selección de paquetes instalados de una instancia de Fedora a otra?

Tengo un sistema Fedora (A) donde he instalado algunos paquetes a lo largo del tiempo. Ahora quiero instalar Fedora en otra computadora (B) y quiero instalar los mismos paquetes en ella.

En términos de Debian, quiero lograr algo como esto:

$ dpkg --get-selections > pkg_sel_host_a  # on host_a
$ dpkg --set-selections < pkg_sel_host_a  # on host_b

Pero para ser honesto, realmente quiero un método mejor para seleccionar los mismos paquetes en el nuevo sistema Fedora 19 (B):solo quiero instalar los paquetes del sistema A que se mencionaron explícitamente en una instalación de dnf install (o yum install ) línea de comandos, ¡y no los que se instalaron como dependencias!

¿Por qué? Porque quizás las dependencias han cambiado y no quiero instalar dependencias obsoletas en el nuevo sistema. Además, cuando elimino paquetes, también quiero eliminar (posiblemente) las dependencias instaladas automáticamente innecesarias (es decir, huérfanas).

He encontrado dnf list installed – pero no muestra si un paquete se seleccionó explícitamente o simplemente se instaló debido a una dependencia.

¿Cómo obtengo esa información en Fedora?

¿Cuál es la forma Fedora/dnf de replicar selecciones de paquetes?

Respuesta aceptada:

Desde Fedora 26, el Dnf repoquery el subcomando admite una nueva opción para enumerar todos los paquetes instalados por el usuario:

$ dnf repoquery --qf '%{name}' --userinstalled 
 | grep -v -- '-debuginfo$' 
 | grep -v '^(kernel-modules|kernel|kernel-core|kernel-devel)$' > pkgs_a.lst

A diferencia de otros métodos, también enumera todos los paquetes debuginfo. El grep adicional en el ejemplo anterior los filtra.

Para instalar la lista en el host B:

$ < pkgs_a.lst xargs dnf -y install

API DNF

Con versiones recientes de Dnf (p. ej., Fedora>=23), se puede consultar la base de datos de paquetes para obtener nombres de paquetes instalados por el usuario a través de la API de Dnf Python:

$ python3 -c 'import dnf; b = dnf.Base(); b.fill_sack(); 
  l = sorted(set(x.name for x in b.iter_userinstalled() 
       if not x.name.endswith("-debuginfo") 
          and x.name not in 
             ["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); 
  print("n".join(l)) ' > pkgs_a.lst

# dnf install $(cat pkgs_a.lst) # on host_b

Por defecto, dnf install aborta si uno o más paquetes ya no están disponibles. Alternativamente, se puede obligar a dnf a instalar todos los restantes:

# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b

PD: Coloque el código anterior y más en user-installed.py que también es compatible con otras distribuciones.

historial instalado por el usuario

En Fedora 23 y versiones posteriores, Dnf proporciona la

# dnf history userinstalled

comando que enumera todos los paquetes instalados por el usuario. A partir de 2016-11, su utilidad es limitada porque no hay forma de controlar su salida e imprime paquetes completamente calificados (es decir, incluye información de versión).

Limitaciones instaladas por el usuario

Tenga en cuenta que el marcado de paquetes como instalados por el usuario tiene algunas limitaciones en algunas versiones de Fedora, para los sistemas de la era Fedora 23 (desde alrededor de 2015-11) los siguientes problemas son relevantes):

  • los paquetes instalados a través de la GUI no están incluidos
  • los paquetes instalados a través del controlador de comando no encontrado no están incluidos
  • se incluyen algunos paquetes instalados por defecto (por anaconda)
Relacionado:¿Rango de bus ilegal o nombre para la función lógica, por ejemplo, "instMyAdder" de tipo 4 Bit Adder?

Repoquería

En sistemas Fedora más antiguos, donde Dnf, la API de Dnf y el dnf history userinstalled no están disponibles, se puede usar repoquery en su lugar, por ejemplo:

$ repoquery --installed 
     --qf '%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}' --all 
    | awk -F'|' ' $2 ~ /user/ && ($3 != 4294967295) { print $1 }'  
    | sort -u > pkgs_a.lst

La segunda condición awk se usa para excluir paquetes que instaló el instalador. La identificación de usuario del instalador aparentemente se almacenó como 4294967295; alternativamente, puede escribir algo como ($3 == 0 || $3 == your-user-id) .

Tenga en cuenta que este comando funciona en Fedora hasta la versión 21, pero p. no en la versión 23, porque el comando repoquery fue reemplazado por dnf repoquery . Y dnf repoquery no entiende el %{yumdb_info.reason} etiqueta.


Fedora
  1. Cómo crear paquetes desde el origen mediante CheckInstall

  2. Cómo eliminar paquetes instalados de un repositorio específico en CentOS, Fedora

  3. Cómo actualizar Fedora 34 desde Fedora 33 usando DNF

  4. Debian:¿cómo replicar selecciones de paquetes instalados de un sistema Debian a otro? (Debian Wheezy)?

  5. Cómo empaquetar y transferir imágenes de Docker de un servidor a otro

Cómo compilar paquetes Debian desde el código fuente

Cómo actualizar de Fedora 32 a Fedora 33

Cómo actualizar Fedora 23 a Fedora 24 usando DNF

Cómo actualizar Fedora 24 a Fedora 25 usando DNF

Cómo actualizar Fedora 25 a Fedora 26 usando DNF

Cómo actualizar a Fedora 35 desde Fedora 34