apt-get installは内部で何をしますか?


60

apt-get install ...コマンドは何をしますか?

apt-get install ...コマンドを入力すると、画面にいくつかのテキストが表示されますが、十分な情報がありません。ファイルが作成/編集されているか、サービスが開始されているか、その他のアクティビティがあるかを知りたい...

.sh実行時にapt-get install ...実行されるファイルはありますか?もしそうなら、そのshファイルの内容をどのように見ることができますか?

この質問の理由は、最近私がtomcat7をインストールしようとしたことapt-get install tomcat7です。tomcat7-admin(マネージャーWebアプリケーション)をインストールするまで、すべては正常に機能し、サーバーは要求に応答しなくなります。私はこれを何度も試しましたが、これは常に起こります。




訪問wiki.debian.org/Aptの詳細は
Pandya

2
14.04から、apt-getに置き換えられていaptます。交換はまだ完全ではありませんが、それはのために働くinstallupgradeおよびdist-upgrade他の中。
水田ランダウ14年

@PaddyLandauそれは適切な代替ユーティリティですか、それともエクストラ/ラッパーユーティリティですか?
ムル14年

回答:


49

主にapt-get、次のことを行います。

  • 依存関係のチェック(およびインストールの要求)、
  • パッケージをダウンロードして検証し、dpkgインストールするように指示します。

dpkg 意志:

  • パッケージを抽出し、コンテンツを適切な場所にコピーし、既存のファイルとそれらの変更を確認します。
  • 実行パッケージメンテナスクリプトpreinstpostinst、(そしてprermpostrmこれらの前に、パッケージがアップグレードされている場合)
  • トリガーに基づいていくつかのアクションを実行する

通常はにあるメンテナースクリプトに興味があるかもしれません/var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}。これらは通常、シェルスクリプトですが、厳密な規則はありません。例えば:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm

30

要するにapt-get installお使いのシステムが正常にインストールされ、新しいソフトウェアアプリケーションを実行できることを必要とされているすべてのものを行います。

より長いです:

事前準備:

マンページから:

インストール用に指定されたパッケージに必要なすべてのパッケージも取得およびインストールされます。

これらのパッケージは、ネットワーク内のリポジトリに保存されます。そのapt-getため、必要なものをすべて一時ディレクトリにダウンロードします(/var/cache/apt/archives/)。それらは、WebサーバーまたはFTPサーバーからダウンロードされます。それらは、いわゆるで指定されていsources.listます。リポジトリのリスト。それ以降、それらは手順ごとにインストールされます。

最初のものは、それ以上の依存関係がないものです。そのため、他のパッケージをインストールする必要はありません。これにより、他のパッケージ(以前は依存関係があった)に依存関係がなくなりました。システムは、指定されたパッケージがインストールされるまで、そのプロセスを繰り返し行います。

各パッケージにはインストール手順が実行されます。

パッケージのインストール:

DebianベースのLinuxディストリビューションでは、Ubuntuとして、これらのパッケージはdeb- Debianバイナリパッケージ形式と呼ばれる指定された標準化された形式になっています

このようなパッケージには、システムにインストールされるファイルが含まれています。また、制御ファイルが含まれています。このファイルには、特定の状況でパッケージングシステムが実行するスクリプトが含まれています。いわゆるメンテナースクリプト。これらのスクリプトは次のように分割されています。

  • preinst:ファイルをシステムファイル階層にインストールする前
  • postinst:インストール後
  • prerm:アンインストール前
  • postrm:アンインストール後

新しいパッケージのインストール手順を示す興味深い画像があります。

設置

さらに制御ファイルもありますが、最も重要なものは次のとおりです。

  • control:依存関係のリスト、およびパッケージを識別するためのその他の有用な情報
  • conffiles:構成ファイルのリスト(通常はのもの/etc
  • debian-binary現在2.0の deb-packageバージョンが含まれています
  • md5sums:検証用のパッケージ内の各ファイルのmd5sumのリスト
  • templates:インストール中のエラーの説明とダイアログを含むファイル

11

実際の内部の ものについては、Aptソースを取得する必要があります。ソースリポジトリを有効にしている場合、かなり簡単です。

apt-get source apt

apt-getコマンド自体はに住んでいますcmdline/apt-get.cc。読み通すのは苦痛ですが、ほとんどapt-getののアクションはそこにかなり詳しく説明されています。ただし、インストールはに存在するDoInstall関数を介してマッピングされapt-private/private-install.{cc,h}ます。

apt-getはコインの片側にすぎないことを覚えておく必要があります。
dpkg実際のインストールを処理していますがDoInstalldpkg直接は知りません。apt-get実際、驚くべきことにパッケージマネージャーに依存しません。すべての機能はapt-pkg/package-manager.cc

少しだけ見ていますが、実際にdpkgシステムに接続されている場所はわかりません。これのいくつかは自動設定されているように見えますapt-pkg/aptconfiguration.ccが、これは非常によくできています。これを解くのに何日も費やすことができます。

ただし、ソースドキュメントは良好です。各ファイルを調べてヘッダーを読んで、実際に何が起こっているかを判断するよりも悪いことがあります。


6

ここには、この短いものよりも優れた素晴らしい回答がいくつかありますが、パッケージマネージャーによって行われた変更をよりよく理解するのに役立つと思われるものはDockerです。を使用してコンテナで行われた変更を比較することができ、docker diff <container>すべての変更が表示されます。これはapt-get install、システムの動作を確認するために内部を見るのに特に役立ちます。クイック検索により、これを実装するのに役立ついくつかの リソースが取得されます。


1
ご指摘いただきありがとうございます。Dockerコンテナーにfirefoxをインストールし、別のターミナルタブにコンテナーの差分を厳密に監視し、コンテナー内のすべてのファイルが変更されていることを確認しました。より明確に理解するのに役立ちました。
アビー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.