1つのFedoraインスタンスから別のインスタンスとしてインストールされたパッケージ選択をどのようにコピーしますか?

1つのFedoraインスタンスから別のインスタンスとしてインストールされたパッケージ選択をどのようにコピーしますか?

私はいくつかのパッケージをインストールしたFedoraシステム(A)を持っています。別のコンピュータ(B)にFedoraをインストールし、そのコンピュータに同じパッケージをインストールしようとしています。

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 list installedが、パッケージが明示的に選択されたか、依存関係のためにインストールされたばかりのものは表示されません。

Fedoraでこの情報を取得するにはどうすればよいですか?

Fedora / dnfのパッケージ選択コピー方法は何ですか?

ベストアンサー1

Fedora 26からDNFrepoquery サブコマンドのサポートユーザーがインストールしたすべてのパッケージを一覧表示する新しいオプションがあります。

$ 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

ダンジョン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 install1つ以上のパッケージが使用できなくなった場合は中止します。または、dnf強制することができる残りをすべてインストールします。

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

添付:上記のコードなどuser-installed.py他のディストリビューションもサポートしています。

過去のユーザーのインストール

Fedora 23以降では、Dnfは以下を提供します。

# dnf history userinstalled

ユーザーがインストールしたすべてのパッケージを一覧表示するコマンド。 2016年11月現在、限られた有用性これは、出力を制御する方法がなく、完全なパッケージ(バージョン情報など)を印刷するためです。

ユーザーインストールの制限

パッケージをユーザーインストールとしてマークするには、特定のFedoraバージョンにいくつかの制限があります。 Fedora 23時代(2015年11月頃から始まる)システムでは、次の質問が含まれます。

また探して

以前の Fedora システムでは Dnf、Dnf API をdnf history userinstalled使用できません。また探して代わりに、たとえば次のようになります。

$ 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では機能しますが、バージョン23では機能しません。たとえば、コマンドがおよびrepoqueryに変わったためですdnf repoquerydnf repoqueryラベルがわかりません%{yumdb_info.reason}

おすすめ記事