私はFedoraシステム(A)を持っており、時間をかけていくつかのパッケージをインストールしてきました。次に、Fedoraを別のコンピューター(B)にインストールし、同じパッケージをインストールしたいと思います。
Debianの用語では、私は次のようなことを達成したいと思っています:
$ dpkg --get-selections > pkg_sel_host_a # on host_a
$ dpkg --set-selections < pkg_sel_host_a # on host_b
しかし、正直なところ、新しいFedora 19システムで同じパッケージを選択するためのより良い方法が本当に必要です(B): dnf install
> (または yum install
)コマンドライン–依存関係としてインストールされたものではありません!
なんで?おそらく依存関係が変更されたためです–そして私は新しいシステムに古い依存関係をインストールしたくありません。さらに、パッケージを削除するときに、(おそらく)不要な自動的にインストールされた依存関係(つまり、孤立したもの)も削除したいと思います。
dnfリストがインストールされているのを見つけました
–ただし、依存関係のためにパッケージが明示的に選択された場合、またはインストールされたばかりの場合は表示されません。
Fedoraでその情報を取得するにはどうすればよいですか?
パッケージの選択を複製するFedora/dnfの方法は何ですか?
承認された回答:
Fedora 26以降、Dnf repoquery
サブコマンドsupportsには、ユーザーがインストールしたすべてのパッケージを一覧表示するための新しいオプションがあります。
$ 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バージョンにいくつかの制限があることに注意してください。Fedora23っぽい時代のシステム(2015-11年頃)では、以下の問題が関係しています):
- GUIを介してインストールされたパッケージは含まれていません
- command-not-foundハンドラーを介してインストールされたパッケージは含まれていません
- デフォルトで(anacondaによって)インストールされるいくつかのパッケージが含まれています
Repoquery
Dnf、Dnf API、およびdnf履歴ユーザーがインストールした
古い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)
のように記述できます。 。
このコマンドはリリース21までのFedoraで機能することに注意してください。コマンドrepoquery
のため、リリース23ではありません dnf repoquery
に置き換えられました 。そしてdnfrepoquery
%{yumdb_info.reason}
を理解していません タグ。