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

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

いいですね。バイナリとその設定データファイルと依存関係を使用apt-get {install|remove} mypackages、インストール、アップグレード、または削除する方法を理解します(実際に他のフラグが指定されていない限り、バイナリのみが削除されます)。apt-get upgraderemove

私は説明されているようにそれがどのように使用されているのかを探しているのではなく、manそれが何をしているのかについて高いレベルを探しています。私の究極の目標は、複数のリモートコンピュータにいくつかのカスタムソフトウェア(makeファイルから生成された)をインストールして管理する方法を作成することであり、プロセスについてもっと知る必要があります。この質問に対する回答が使用しているディストリビューションに基づいている場合は、Debian に合わせて調整してください。

これがどのように機能するかについての一般的な原則に加えて、次の具体的な質問があります。

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

答え1

あなたは見る必要がありますhttps://wiki.debian.org/Packaging- そこにあるパッケージングチュートリアルと新しいメンテナンスガイドの一部があなたに大いに役立つでしょう。

あなたの質問によると、順番に:

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

  2. オペレーティングシステムは重要ではありません。必要に応じて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. source.listファイルで表示ソースを設定できます。次の行を検討してください。

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

    debこれは.deb(バイナリ)ファイルをインポートする場所で、URLプレフィックス、スイート/バージョン(「stretch」)、およびコンポーネント(「main」)です。

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

  3. Packages.xzファイルのリストみんなこのキット/コード名/アーキテクチャのパッケージ。それも与えるたとえば、このファイルがある場所です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経由で利用可能)があります。 Packages.xzファイルの異なるバージョン間の違い、各インストール可能ファイルの完全なリスト、それらが属するパッケージ(Contents-amd64.gz、例えばapt-fileで使用されているがapt-getでは使用されていない)など、あなたとは関係がないしかし、検索で見ることができます。http://http.us.debian.org/debian/dists/stretch/;ほとんどはプレーンテキストファイルです。

このファイルはすべてプレーンテキストです。理論的には手で作ることができます。実際、みんな次のいずれかを使用してください。リポジトリ作成ツール。ここではこれがずっと前に行われた選択なので、最新の情報ではない可能性があることを警告します。私たちはmini-dinstallを使います。これらのツールの出力は通常のファイル、または最悪の場合はシンボリックリンクです。必要なWebサーバーと同期できます。

関連情報