GNU/Linux >> Linux の 問題 >  >> Fedora

Fedora –インストールされたパッケージの選択をあるFedoraインスタンスから別のインスタンスに複製する方法は?

私は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によって)インストールされるいくつかのパッケージが含まれています
関連:タイプ4ビット加算器の「instMyAdder」などの論理関数の無効なバス範囲または名前?

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}を理解していません タグ。


Fedora
  1. CheckInstallを使用してソースからパッケージを構築する方法

  2. CentOS、Fedoraの特定のリポジトリからインストールされたパッケージを削除する方法

  3. Debian –インストールされているパッケージの選択をあるDebianシステムから別のシステムに複製する方法は? (debian Wheezy)?

  1. Ubuntuにインストールされているパッケージを一覧表示する方法

  2. DNFを使用してFedora34をFedora33からアップグレードする方法

  3. Dockerイメージをあるサーバーから別のサーバーにパッケージ化して転送する方法

  1. Ubuntuからソフトウェアパッケージをアンインストールまたは削除する方法

  2. CentOSからパッケージをアンインストールまたは削除する方法

  3. Fedora23からFedora24にアップグレードする方法