web-dev-qa-db-ja.com

パッケージのリストをダウンロード/インストールすることと、各パッケージを個別にダウンロードすることの間に違いはありますか?

開発パッケージのリスト(たとえば、pkgs = "python3.5-dev python3-tk")が与えられた場合、実行中に違いがあります

Sudo apt-get install $pkgs 

vs.

for p in $pkgs; do Sudo apt-get install $p; done

私は主にdependencies-topo-sort関連することを求めています、つまり、異なる方法でダウンロードおよびインストールされた異なるパッケージがありますか?

11
CIsForCookies

はい、依存関係を満たすために異なるパッケージを選択できます。[〜#〜] n [〜#〜]を指定する1つのコマンドを実行しますインストールされるパッケージは、実際に指定されたパッケージが同じであっても、インストールする1つのパッケージを指定する[〜#〜] n [〜#〜]コマンドの実行とは異なる効果を持つ場合がありますいずれの場合にも。

主な実用的な違いはおそらく karelが説明したものです .ただし、依存関係の解決方法が異なるため、すべての操作が成功した場合でも、影響は異なります。

その理由は、広く推測したとおりです。

私は主にdependency-topo-sort関連を尋ねています

より具体的には、これは、依存関係を満たす代替が複数存在する可能性があるために発生します。

要約説明

virtual packageaに依存するパッケージvをインストールするとし、vを満たすことができるとします。パッケージbまたはパッケージcによって、他の方法ではありません。bcに依存せず、cbに依存せず、これらのパッケージがすでにインストールされていないとします。次のコマンドを実行するとします。

Sudo apt-get install a

次に、APTは、依存関係を満たすためにbまたはcを選択します。どれが選択されるかは、実行した計算の結果であり、インストールしたパッケージ、使用可能なパッケージ、使用しているAPTのバージョン、および構成方法によって影響を受ける可能性があります。しかし、これらすべての条件が同じ場合、決定は毎回同じになります。

一般性を失うことなく bを選択するとします。次に、aおよびbがインストールされます。次に実行するとします:

Sudo apt-get install c

その後、abcがすべてインストールされます。つまり、実行した結果、3つのパッケージすべてがインストールされました。

Sudo apt-get install a
Sudo apt-get install c

対照的に、これらの代わりにこのコマンドを実行するとします:

Sudo apt-get install ac

次に、aに対するvの依存関係はcによって満たされるため、bはインストールされません。つまり、aおよびcではなく、bのみがインストールされ、以下の実行の結果としてインストールされます。

Sudo apt-get install ac

具体的な例

この具体的な例は、apt-getオプションを指定してaptまたは-sを実行すると、実行ではなくアクションをシミュレートすることで確認できます。 (apt-get -s/apt -sだけでは完全に確認できないことに注意してください。以前のapt-get -s/apt -sコマンドは何にも影響しないため、後のコマンドには影響しません。これらは単なるシミュレーションであるためです。)

Ubuntu 16.04 LTSシステムでSudo apt-get install jeditを実行すると、いくつかのOpenJDK 8パッケージがインストールされます。

ek@Io:~$ apt -s install jedit
NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ca-certificates-Java default-jre default-jre-headless Java-common Java-wrappers openjdk-8-jre openjdk-8-jre-headless
Suggested packages:
  default-Java-plugin icedtea-8-plugin fonts-wqy-zenhei fonts-indic
The following NEW packages will be installed:
  ca-certificates-Java default-jre default-jre-headless Java-common Java-wrappers jedit openjdk-8-jre
  openjdk-8-jre-headless
0 upgraded, 8 newly installed, 0 to remove and 11 not upgraded.
Inst Java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Inst ca-certificates-Java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all]) []
Inst Java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all]) []
Inst openjdk-8-jre-headless (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [AMD64])
Inst default-jre-headless (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [AMD64])
Inst openjdk-8-jre (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [AMD64])
Inst default-jre (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [AMD64])
Inst jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])
Conf Java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Conf Java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all])
Conf ca-certificates-Java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all])
Conf openjdk-8-jre-headless (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [AMD64])
Conf default-jre-headless (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [AMD64])
Conf openjdk-8-jre (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [AMD64])
Conf default-jre (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [AMD64])
Conf jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])

APTにopenjdk-9-jreを実行してjeditSudo apt-get install jedit openjdk-9-jreの両方をインストールするように指示した場合、Javaへのjeditの依存関係のため、OpenJDK 8パッケージはインストールされません。ランタイムはOpenJDK 9パッケージで満たされます。

ek@Io:~$ apt -s install jedit openjdk-9-jre
NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ca-certificates-Java java-common Java-wrappers libatk-wrapper-Java libatk-wrapper-Java-jni openjdk-9-jre-headless
Suggested packages:
  default-jre icedtea-8-plugin fonts-indic
The following NEW packages will be installed:
  ca-certificates-Java java-common Java-wrappers jedit libatk-wrapper-Java libatk-wrapper-Java-jni openjdk-9-jre
  openjdk-9-jre-headless
0 upgraded, 8 newly installed, 0 to remove and 11 not upgraded.
Inst Java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Inst ca-certificates-Java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all]) []
Inst Java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all]) []
Inst openjdk-9-jre-headless (9~b114-0ubuntu1 Ubuntu:16.04/xenial [AMD64])
Inst libatk-wrapper-Java (0.33.3-6 Ubuntu:16.04/xenial [all])
Inst libatk-wrapper-Java-jni (0.33.3-6 Ubuntu:16.04/xenial [AMD64])
Inst openjdk-9-jre (9~b114-0ubuntu1 Ubuntu:16.04/xenial [AMD64])
Inst jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])
Conf Java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Conf Java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all])
Conf ca-certificates-Java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all])
Conf openjdk-9-jre-headless (9~b114-0ubuntu1 Ubuntu:16.04/xenial [AMD64])
Conf libatk-wrapper-Java (0.33.3-6 Ubuntu:16.04/xenial [all])
Conf libatk-wrapper-Java-jni (0.33.3-6 Ubuntu:16.04/xenial [AMD64])
Conf openjdk-9-jre (9~b114-0ubuntu1 Ubuntu:16.04/xenial [AMD64])
Conf jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])

jeditopenjdk-9-jreを2つの別々のSudo apt-get installコマンドでこの順序でインストールすると、OpenJDK 8とOpenJDK 9の両方のパッケージが取得されます。

16
Eliah Kagan

非常に長いパッケージのリストから1つのパッケージでもインストールできない場合、コマンドの実行が停止し、情報エラーメッセージが出力されます。一部のパッケージは正常にインストールするためにターミナルでのインタラクティブなユーザー入力を必要とするため、1つのバッチで長いパッケージのリストをインストールすることもイライラすることがあります。ユーザー入力を間違えた場合は、インストールプロセス全体を最初からやり直す必要があります。

パッケージの最初の長いリストを25-40パッケージのグループに分割し、一度に1つのグループでパッケージをインストールしない限り、コマンドを最後まで正常に実行することは困難です。これはそれほど時間をかけずに、すべてのパッケージのインストールを管理しやすくします。

もう1つ覚えておいてください。 Sudo apt installは管理ディレクトリをロックします(/var/lib/dpkg/)実行中なので、aptが完全に処理を完了するまで、root権限を必要とする他のプロセスを実行しないでください。たとえば、ターミナルからaptを使用してパッケージをインストールする場合は、aptが処理を完了するまで、ターミナルから他のスナップパッケージを新しいタブまたはウィンドウにインストールしないでください。

8
karel