web-dev-qa-db-ja.com

apt-getアップデートが必要かどうかを検出します

apt-get updateの実行が必要かどうかを検出する方法はありますか?

apt-get updateを実行すると、最新のリストが既にある場合でもダウンロードされるようです。最新のリストがある場合は、リストのダウンロードを避けたいと思います。

1
user96931

/etc/apt/sources.listおよび/etc/apt/sources.list.d/*のすべてのソースからURLを抽出し、それぞれのリモートリポジトリ内のファイルのタイムスタンプを/var/lib/apt/lists内のファイルのctimesと比較できます。しかし、それはIMHOがそれらを再度ダウンロードするよりも時間がかかります(少なくとも私の接続では、50MBは非常に迅速に処理されます)。

1
tink

あなたの声明は正しくありません:apt updateは、最新バージョンですでにダウンロードされているカタログファイルをフェッチしません。どれどれ:

  1. apt updateの最初の実行:

    …
    Get:33 http://deb.debian.org/debian sid/main DEP-11 48x48 Icons [3,683 kB]                              
    Get:34 http://deb.debian.org/debian sid/main DEP-11 64x64 Icons [7,474 kB]                              
    Fetched 16.1 MB in 4s (4,496 kB/s)                                                                 
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    64 packages can be upgraded. Run 'apt list --upgradable' to see them.
    

    ご覧のとおり、aptは実際に16.1MiB相当のデータをフェッチしました。

  2. 2回目の実行:

    Hit:1 http://security.debian.org/debian-security buster/updates InRelease
    Hit:2 http://deb.debian.org/debian buster InRelease                           
    Hit:3 http://deb.debian.org/debian buster-updates InRelease                   
    Hit:4 http://deb.debian.org/debian sid InRelease       
    Reading package lists... Done                          
    Building dependency tree       
    Reading state information... Done
    64 packages can be upgraded. Run 'apt list --upgradable' to see them.
    

    ご覧のとおり、データはフェッチされていません。

ここでの「秘訣」は、aptがアーカイブサーバーに対してHTTP [S]リクエストを行うときに、すでにキャッシュされている各リソースの「最終変更」時刻が含まれていることです。サーバーはそのタイムスタンプを確認し、より新しいバージョンのリソースがない場合は、特別なHTTPステータスコード(「変更されていない」)で応答し、本文はありません。 aptはそれに気づき、すぐに利用可能なものを使用します。

ご覧のとおり、まだsomeトラフィック(送信要求とそれらへの受信応答)がありますが、次のようになります。

  • データを取得するときと比べるとごくわずかです。
  • チェックを実行しないと、アーカイブに更新されたデータがないことを確認することはできません。
1
kostix