Fedora 26以降、Dnf repoquery
サブコマンドのサポートには、ユーザーがインストールしたすべてのパッケージを一覧表示する新しいオプションがあります。
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
他の方法とは対照的に、すべてのdebuginfoパッケージもリストします。上記の例の追加のgrepは、それらを除外します。
ホストBにリストをインストールするには:
$ < pkgs_a.lst xargs dnf -y install
DNF API
最近のDnfバージョン(Fedora> = 23など)では、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
デフォルトでは、dnf install
1つ以上のパッケージが利用できなくなった場合、中止します。または、dnfに残りのすべてを強制的にインストールすることもできます。
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS:上記のコードなどを追加しuser-installed.py
て、他のディストリビューションもサポートします。
履歴ユーザーインストール済み
Fedora 23以降では、Dnfは
# dnf history userinstalled
ユーザーがインストールしたすべてのパッケージをリストするコマンド。2016-11現在、その出力を制御する方法がなく、完全に修飾された(つまり、バージョン情報を含む)パッケージを印刷するため、その有用性は制限されています。
ユーザーがインストールした制限
Fedora 23-ish時代のシステム(2015年11月頃から)には、次の問題が関連しています)。
レポクエリ
Dnf、Dnf API dnf history userinstalled
が利用できない古いFedoraシステムでは、代わりにrepoqueryを使用できます。例:
$ 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
2番目のawk条件は、インストーラーによってインストールされたパッケージを除外するために使用されます。インストーラーのユーザーIDは、明らかに4294967295として保存されていました-あるいは、のようなものを書くことができます($3 == 0 || $3 == your-user-id)
。
このコマンドはFedoraでリリース21まで動作しますが、たとえば、コマンドrepoquery
がに置き換えられたため、リリース23では動作しないことに注意してくださいdnf repoquery
。そしてdnf repoquery
、%{yumdb_info.reason}
タグを理解していません。
repoquery ...
わかりませんが、実行時にシステムでこれらに気付きました。「インストールされたpkgのyumdb querytag 'reason'が無効です:HandBrake-cli-0.9.5-1.fc14.x86_64」