なぜ適切なキャッシュを更新し続けるのですか?

なぜ適切なキャッシュを更新し続けるのですか?

新しいパッケージをインストールしようとすると、通常は次の応答が表示されます。

oliver@cloud:~$ sudo apt-get install unison
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package unison

私はすでにパターンを知っています。続けます。

oliver@cloud:~$ sudo apt-get update
Hit http://downloads-distro.mongodb.org dist Release.gpg
Ign http://downloads-distro.mongodb.org/repo/debian-sysvinit/ dist/10gen Translation-en
Ign http://downloads-distro.mongodb.org/repo/debian-sysvinit/ dist/10gen Translation-en_US
Hit http://downloads-distro.mongodb.org dist Release
Ign http://downloads-distro.mongodb.org dist/10gen amd64 Packages
Ign http://downloads-distro.mongodb.org dist/10gen amd64 Packages
Ign http://http.debian.net/debian/ squeeze/contrib Translation-en_US
Ign http://http.debian.net/debian/ squeeze/main Translation-en_US
Ign http://http.debian.net/debian/ squeeze/non-free Translation-en_US
...

oliver@cloud:~$ sudo apt-get install unison
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  unison
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 693 kB of archives.

明日新しいパッケージをインストールしたい場合は、update再インストールするまでサーバーはこれを知りません。私はDebianサーバーでのみこれに気づきました。

私はローカルキャッシュの必要性を理解しています。私の問題は、新しいものをインストールしようとするたびにリセットされるようです。キャッシュが長い間いっぱいになりたいです。通常、翌日新しいものをインストールしようとすると、apt-getパッケージが見つからないというメッセージが表示されます。

このサーバーにはcron-aptすでにインストールされています。デフォルトではインストールされていると仮定する必要があります。cron-apt毎晩4時に実行するように設定します。キャッシュが欠落している理由は次のとおりです。

oliver@cloud:/var/lib/apt/lists$ sudo apt-get update
...
Fetched 12.1 MB in 11s (1,023 kB/s)
Reading package lists... Done
oliver@cloud:/var/lib/apt/lists$ ls /var/lib/apt/lists/ | wc -l
24
oliver@cloud:/var/lib/apt/lists$ sudo /usr/sbin/cron-apt
oliver@cloud:/var/lib/apt/lists$ ls /var/lib/apt/lists/ | wc -l
8

私が知っている限り、仕事の1つはcron-apt実際には移動する apt-get update:

oliver@cloud:/var/lib/apt/lists$ cat /etc/cron-apt/action.d/0-update
update -o quiet=2

答え1

あなたの質問は少しあいまいです。質問が「なぜapt-get updateを実行するのですか?」なら、答えはaptの更新が時間のかかるプロセスである可能性があるということです。パッケージをインストールするたびにこれを行うと、時間がかなり増えます。通常、1日に1回キャッシュを更新するだけで十分です(理想的には自動化された方法で)。

「明日新しいパッケージをインストールしたい場合は、再度更新するまでサーバーはこれを知りません。私はDebianサーバーでのみこれに気づきました。

この部分についてはよくわかりません。明日、新しいバージョンのユニゾンがリリースされたらどうすればわかりますか?同様に、apt-get updateを1日に1回以上(たとえば、cronスクリプトを介して)実行すると、aptは新しいパッケージがあることを知ります。つまり、新しいパッケージが利用可能であるという事実を自動的に伝えません。パッケージをアップグレードすると、ユーザーが解決する必要があるシステムの安定性の問題が発生する可能性があるため、これには妥当な理由があります。

通常、Debian ベースのシステムでは、徐々に更新されるソフトウェアのバージョンが必ずしも優れているわけではありません。セキュリティ上の問題がある場合、または新しいバージョンに必要な機能がない限り、通常はマイナーバージョンのアップグレードには興味がありません。

答え2

通常、これは、最後のアップデートで得られた正確なバージョン情報が新しいバージョンに置き換えられたため、Debian サーバーで使用できなくなることを意味します。しかし、Squeezeでは、これはあまりにも多くは発生しません(セキュリティアップデートを検討しても)。もう1つのオプションは、/var/lib/apt/listsサーバーで利用可能なパッケージのリスト(apt-get updateにインポートされたディレクトリも含む)をキャッシュするディレクトリを定期的にクリーンアップする奇妙なスクリプト(これらのスクリプトは不明です)を使用することです。不安定であっても実験的なサーバー(少し奇妙に見える)に従わない限り、この場合はパッケージが頻繁に更新されるため、キャッシュリストは非常に迅速に古いものになります。だから私のアドバイスは、apt-get updateインストールプロセスを開始するたびに最初にその呼び出しを実行するように筋肉の記憶を訓練することです。

答え3

ついにこの問題を解決できました。先に推測したように、cron-aptこれが犯人です。またはより具体的に構成します。

私を混乱させた最初のことは、インストールされたcron-aptということです。他のコンピュータにはデフォルトでインストールされていないためです。この問題が発生した VPS プロバイダーのコンピューターでのみ発生しました。スクリプトがすでに同様のメカニズムを提供していると仮定しているため、その存在は混乱しています/etc/cron.daily/apt。いずれにせよ、質問に従って実行すると、cron-aptキャッシュされた情報の量が減ります。

最初は見えませんでした。なぜそのため、cron-apt実際に更新が毎日行われているからです。

oliver@cloud:/$ cat /etc/cron-apt/action.d/0-update
update -o quiet=2

だからどうしたの?

/usr/sbin/cron-aptスクリプトを1行ずつ実行しなければ問題が見つかりませんでした。私はここ$APTCOMMANDに常に何か追加が添付されることを知っています$OPTIONS。結果の呼び出しは次のとおりです。

/usr/bin/apt-get -o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list update -o quiet=2

それで私は/etc/cron-apt/configこの$OPTIONSブロックを見て発見しました。

# General apt options that will be passed to all APTCOMMAND calls.
# Use "-o quiet" instead of "-q" for aptitude compatibility.
#  OPTIONS="-o quiet=1"
# You can for example add an additional sources.list file here.
#  OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
# You can also set an alternative sources.list file here.
#  OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list -o Dir::Etc::SourceParts=\"/dev/null\""
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
# If you want to allow unauthenticated and untrusted packages add the
# following to your options directive.
#  OPTIONS="-o quiet=1 -o APT::Get::AllowUnauthenticated=true -o aptitude::Cmdline::ignore-trust-violations=yes"
# To limit the bandwidth used use the following line. This example limit the
# bandwidth usage to 25 kB/s.
#  OPTIONS="-o Acquire::http::Dl-Limit=25"

糸が飛び出しています。コメントがない方。明らかに、この行はデフォルトでは存在しません(他のシステムでもこの内容をすばやく確認しました)。

不明な場合、これらのオプションを使用する理由は、キャッシュされたソースが毎晩ホワイトリストのコンテンツで上書きされるためです。ただそれら)。

VPS プロバイダーは、これが Debian インストールイメージのカスタマイズであることを確認しました。問題のある設定を削除し、すべてが正常に戻りました。

答え4

もちろん、必要になるまで更新する必要がないことがわかっています...何が起こっているのか、情報ディレクトリの一部がapt-getを少し早くするためにローカルにコンピュータに送信されているということです。ディレクトリ全体を取得するためにリモートサーバーに複数回要求するのではなく、1回の要求のみを実行し、必要に応じて更新します。繰り返しますが、このプロセスを使用すると速度が速くなり、現在利用可能なすべてのパッケージが表示され、ディレクトリをローカルに一度だけロードしてディレクトリを表示しようとしている人の負担を軽減できます。

長い時間の間に1つのパッケージだけを作ると、実際には膨大な時間の無駄のように見えるかもしれませんが、実装は誰にでも役立ちます。

関連情報