web-dev-qa-db-ja.com

apt-getは実際にはどのように機能しますか?

わかりました、apt-get {install|upgrade|remove} mypackagesバイナリとその構成データファイルおよび依存関係をインストール、アップグレード、または削除します(実際には、removeは、追加のフラグが提供されない限り、バイナリのみを削除します)。

manがこれを説明しているので、それがどのように使用されているかを探していませんが、それが何をしているかを高レベルで示しています。私の最終目標は、いくつかのカスタムソフトウェア(メイクファイルによって作成された)を複数のリモートマシンにインストールおよび管理するための手段を作成することです。そのプロセスについて詳しく知る必要があります。この質問への回答が使用されているディストリビューションに基づいている場合は、Debianに合わせて調整してください。

一般的にどのように機能するかに加えて、次の特定の質問があります。

  1. Aptリポジトリにアクセスしているクライアントはどのようにファイルを追跡しますか?
  2. リポジトリは同じオペレーティングシステムでホストする必要がありますか(つまり、aptリポジトリをredhatでホストできますか)?
  3. ファイルをインストールする場所はどのように指定されていますか?これは.debファイル?
  4. リモートマシンはどのようにリポジトリにアクセスしていますか?それは単にftp(s)またはhttp(s)ですか?
  5. リポジトリをホストしているマシンは特別なソフトウェア(gitリポジトリのgitlabなど)を実行していますか、それとも単なる構造化ファイルシステムですか?
34
user1032531

https://wiki.debian.org/Packaging を参照する必要があります—ここにあるパッケージングチュートリアルは、新しいメンテナのガイドの一部だけでなく、多くの助けになります。

質問に関しては、順番に:

  1. リポジトリには「リスト」ファイルが含まれています。例: http://http.us.debian.org/debian/dists/stretch/main/binary-AMD64/Packages.xzapt-get updateはこれらのリストファイルをダウンロードし、/var/lib/apt/listsに保存します。リストファイルには、一連のメタデータと.debを見つけるための相対URLを含むすべてのパッケージがリストされています。 (これらは人間が読める形式のプレーンテキストファイルなので、見ればわかります)。

  2. OSは関係ありません。必要に応じて、Windowsでホストできます。 (まあ、Windowsが嫌いなファイル名に問題があるかもしれません。)(#4と#5も参照してください)。

  3. はい、それはdebファイル内にあります。 debファイルは実際にはアーカイブです(arを使用)。内部にはいくつかのtarファイルがあります。それらの1つは(本質的に)/に抽出されます。

  4. それは単なるHTTP(またはHTTPS、またはFTP、または... apt-getは多くのプロトコルをサポートしています)です。特別なことは何もありません。 HTTPSがなくても整合性を保証するgpgで署名されたリリースファイルがあることに注意してください。 Debianミラーは主にHTTPではなくHTTPを使用します。 (いくつかは機密性のためにHTTPSもサポートしています)。

  5. それは単なる構造化ファイルシステムです。

Apt-getがパッケージソースとどのように相互作用するかについての簡単な概要の概要:

  1. どのソースを参照するかは、sources.listファイルで設定します。次のような行を考えます。

    deb http://http.us.debian.org/debian/ stretch main
    

    debは、これが.deb(バイナリ)ファイルを取得するためのソースであると述べています。次に、URLプレフィックス、スイート/リリース(「ストレッチ」)、およびコンポーネント(「メイン」)があります。

  2. apt-getにはアーキテクチャのリストがあり、dpkgから取得します。 dpkg --print-architectureAMD64であるとしましょう。 apt-getは、URLプレフィックス、Wordの「dists」、スイート、コンポーネント、およびアーキテクチャを組み合わせることにより、実際にダウンロードしようとしているURLを構築できるようになりました。次に、「Packages.xz」などのいくつかの固定ファイル名を追加します。上記の(#1の)URLが表示されます。リリースファイル http://http.us.debian.org/debian/dists/stretch/Release とその署名(同じ、。 gpgが追加されました)。これらはすべて(場合によっては圧縮された)プレーンテキストファイルです。リリースファイルには、Packages.xzなど、apt-getがダウンロードする他のファイルのチェックサムが含まれています。

  3. Packages.xzファイルには、そのsuite/codename/architecture内のパッケージallがリストされています。また、そのファイルが置かれているpathも示します。たとえば、pool/main/0/0ad/0ad_0.0.21-2_AMD64.deb

  4. Apt-getにパッケージのダウンロードを要求すると、その場所とベースURLを使用してパッケージがダウンロードされるため、パッケージは http://http.us.debian.org/debian/pool/mainにあります。 /0/0ad/0ad_0.0.21-2_AMD64.deb

  5. その他の興味深いディレクトリは、binary-AMD64ではなくsourceです。これはdeb-srcエントリに使用されます。ソースパッケージに関する情報が含まれています(それ以外はかなり似ています)。

  6. リポジトリの一部にすることができる他のものがいくつかあります(それらはすべてオプションであると思います)(つまり、HTTP経由で利用可能)。Packages.xzファイルの異なるバージョン間の差分。パッケージの説明の翻訳、インストール可能なすべてのファイルとそれが属するパッケージの完全なリスト(Contents-AMD64.gz、たとえばapt-getではなくapt-fileによって使用される)など。これらはおそらくあなたには関係ありません。しかし、あなたはそれらをすべて見ることができます http://http.us.debian.org/debian/dists/stretch/ ;それらのほとんどはプレーンテキストファイルです。

これらのファイルはすべてプレーンテキストです。理論的には、手動で作成できます。実際には、everyoneはこれらの リポジトリ生成ツール のいずれかを使用します。ここで、そしてこれはずっと前に行われた選択であったため、古くなっている可能性があることを私は警告します-私たちはmini-dinstallを使用します。これらのツールの出力は、通常のファイル、または最悪の場合はシンボリックリンクです。あなたはそれらをあなたが望むどんなウェブサーバーにもrsyncすることができます。

47
derobert