GNU/Linux >> Znalost Linux >  >> Fedora

Fedora – Jak replikovat výběr nainstalovaných balíčků z jedné instance Fedory do druhé?

Mám systém Fedora (A), kam jsem v průběhu času nainstaloval nějaké balíčky. Nyní chci nainstalovat Fedoru na jiný počítač (B) a chci na něj nainstalovat stejné balíčky.

Z hlediska Debianu chci dosáhnout něčeho takového:

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

Ale abych byl upřímný, opravdu chci lepší metodu pro výběr stejných balíčků na novém systému Fedora 19 (B):Chci jen nainstalovat balíčky ze systému A, které byly výslovně zmíněny v dnf install (nebo yum install ) příkazového řádku – a ne ty, které byly nainstalovány jako závislosti!

Proč? Protože se možná závislosti změnily – a já nechci do nového systému instalovat zastaralé závislosti. Navíc, když odebírám balíčky, chci také odstranit (možná) pak nepotřebné automaticky instalované závislosti (tj. sirotci).

Zjistil jsem, že dnf list installed – ale nezobrazuje se, pokud byl balíček explicitně vybrán nebo právě nainstalován kvůli závislosti.

Jak získám tyto informace na Fedoře?

Jaký je způsob, jakým Fedora/dnf replikuje výběr balíčků?

Přijatá odpověď:

Od Fedory 26 je Dnf repoquery dílčí příkaz support má novou volbu pro výpis všech balíčků nainstalovaných uživatelem:

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

Na rozdíl od jiných metod také uvádí všechny balíčky debuginfo. Další grep ve výše uvedeném příkladu je odfiltruje.

Instalace seznamu na hostitele B:

$ < pkgs_a.lst xargs dnf -y install

Dnf API

S nejnovějšími verzemi Dnf (např. Fedora>=23) lze v databázi balíčků vyhledávat názvy balíčků nainstalovaných uživatelem prostřednictvím rozhraní Dnf Python API:

$ 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

Ve výchozím nastavení dnf install přeruší, pokud jeden nebo více balíčků již není k dispozici. Alternativně lze dnf vynutit instalaci všech zbývajících:

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

PS: Vložte výše uvedený kód a další do user-installed.py který také podporuje další distribuce.

historie uživatelsky nainstalována

Na Fedoře 23 a novějších poskytuje Dnf

# dnf history userinstalled

příkaz, který uvádí všechny balíčky nainstalované uživatelem. Od roku 2016-11 je jeho užitečnost omezená, protože neexistuje způsob, jak ovládat jeho výstup a tiskne balíčky plně kvalifikované (tj. včetně informací o verzi).

Omezení instalovaná uživatelem

Všimněte si, že označení balíčků jako nainstalovaných uživatelem má na některých verzích Fedory určitá omezení, pro systémy z éry Fedory 23 (přibližně z let 2015-11) jsou relevantní následující problémy:

  • balíčky nainstalované prostřednictvím GUI nejsou součástí dodávky
  • balíčky nainstalované pomocí obslužného programu command-not-found nejsou zahrnuty
  • jsou zahrnuty některé balíčky nainstalované ve výchozím nastavení (anaconda)
Související:Neplatný rozsah sběrnice nebo název logické funkce, například „instMyAdder“ typu 4 Bit Adder?

Repoquery

Na starších systémech Fedora, kde je uživatelsky nainstalován Dnf, Dnf API a dnf history userinstalled nejsou dostupné, lze místo toho použít repoquery, např.:

$ 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

Druhá podmínka awk se používá k vyloučení balíčků, které byly nainstalovány instalačním programem. Uživatelské jméno instalačního programu bylo zřejmě uloženo jako 4294967295 – případně můžete napsat něco jako ($3 == 0 || $3 == your-user-id) .

Všimněte si, že tento příkaz funguje na Fedoře až do vydání 21 – ale např. ne ve verzi 23, protože příkaz repoquery byl nahrazen dnf repoquery . A dnf repoquery nerozumí %{yumdb_info.reason} tag.


Fedora
  1. Jak sestavit balíčky ze zdroje pomocí CheckInstall

  2. Jak odebrat nainstalované balíčky ze specifického úložiště v CentOS, Fedora

  3. Jak upgradovat Fedoru 34 z Fedory 33 pomocí DNF

  1. Jak zobrazit seznam nainstalovaných balíčků na Ubuntu

  2. Debian – Jak replikovat výběr nainstalovaných balíčků z jednoho systému Debian do druhého? (debian Wheezy)?

  3. Jak zabalit a přenést obrazy Dockeru z jednoho serveru na druhý

  1. Jak odinstalovat nebo odebrat softwarové balíčky z Ubuntu

  2. Jak odinstalovat nebo odebrat balíčky z CentOS

  3. Jak upgradovat na Fedoru 24 z Fedory 23