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


34

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

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

一般的な仕組みに加えて、次の具体的な質問があります。

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

回答:


47

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は多くのプロトコルをサポートしています)。ただし、特別なことはありません。gpgで署名されたリリースファイルがあり、HTTPSがなくても整合性が保証されていることに注意してください。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から取得します。レッツ・発言です。apt-getは、URLプレフィックス、単語「dists」、スイート、コンポーネント、およびアーキテクチャを組み合わせることで、実際にダウンロードするURLを構築できるようになりました。次に、「Packages.xz」のようないくつかの固定ファイル名を追加します。上記のURL(#1)が得られます。リリースファイルhttp://http.us.debian.org/debian/dists/stretch/Releaseおよびその署名(同じ。これらはすべて(おそらく圧縮された)プレーンテキストファイルです。リリースファイルには、Packets.xzなど、apt-getがダウンロードする他のファイルのチェックサムが含まれています。dpkg --print-architectureamd64

  3. Packages.xzファイルには、そのsuite / codename / architecture内のすべてのパッケージがリストされます。また、そのファイルが置かれているパスも提供します。たとえば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. 他の興味深いディレクトリはのsource代わりですbinary-amd64。これはdeb-srcエントリに使用されます。ソースパッケージに関する情報が含まれています(その他の点ではかなり似ています)。

  6. リポジトリの一部となる可能性のあるもの(つまり、HTTPを介して利用できるもの)は他にもいくつかあります(それらはすべてオプションです。私は信じています)。パッケージの説明の翻訳、すべてのインストール可能なファイルの完全なリスト、およびそれが属するパッケージ(たとえば、apt-getではなくapt-fileで使用されるContents-amd64.gz)など。しかし、http://http.us.debian.org/debian/dists/stretch/をブラウズすることでそれらをすべて見ることができます。それらのほとんどはプレーンテキストファイルです。

これらのファイルはすべてプレーンテキストです。理論的には、手作業で作成できます。実際には、誰もがこれらのリポジトリ生成ツールのいずれかを使用します。ここで、そしてこれはかなり前に行われた選択なので、時代遅れかもしれませんが、私はmini-dinstallを使用します。これらのツールの出力は、通常のファイルまたは最悪の場合はシンボリックリンクです。必要なWebサーバーにrsyncすることができます。


それに私を打つ;-)。unix.stackexchange.com/q/285635/86440は、物事の完全性の側面をカバーしています(ポイント4)。ミラー側のFTPサポートは最近IIRCで無効になりました。
スティーブンキット

#2については、debian.org / doc / manuals / distribute-deb /…の記述が異なります。ありがとう
-user1032531

#5に関しては、wiki.debian.org
DebianRepository /の

1
@ user1032531#2。パッケージの作成はDebianで行うのが最適です。ただし、Webサーバーは何でもかまいません。(通常、ビルドホストで、場合によってはリポジトリ構造全体でさえもパッケージを作成し、それをWebサーバーにアップロードします。)#5。これらのツールは、すべてのリストファイル、署名付きリリースファイルなどを含む、構造化されたファイルシステムの構築に役立ちます(これらはおそらくDebianで実行するのが最も簡単です)。
デロバート

2
@FaheemMithaパッケージ(一部の圧縮では、最新のaptが.xzを好む)は間違いなくダウンロードされ、最終的にになります/var/lib/apt/lists/。コンテンツはapt-fileおよびauto-aptによってダウンロードされます。
デロバート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.