왜 적절한 캐시를 계속 업데이트해야 합니까?

왜 적절한 캐시를 계속 업데이트해야 합니까?

새 패키지를 설치하려고 하면 일반적으로 다음과 같은 응답을 받습니다.

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다시 설치할 때까지 서버는 이에 대해 알 수 없습니다. 나는 데비안 서버에서만 이 사실을 알아차렸으며, 이 문제를 일으키는 어떤 조정 사항도 알지 못합니다.

나는 로컬 캐싱의 필요성을 이해합니다. 내 문제는 새로운 것을 설치하려고 할 때마다 재설정되는 것 같다는 것입니다. 캐시가 오랫동안 채워져 있기를 원합니다. 일반적으로 다음 날 새로운 것을 설치하려고 하면 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

내가 아는 한 직업 중 하나가 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 업데이트가 시간이 많이 걸리는 프로세스일 수 있다는 것입니다. 패키지를 설치해야 할 때마다 이 작업을 수행하면 시간이 꽤 많이 추가됩니다. 일반적으로 하루에 한 번 캐시를 업데이트하면 충분합니다(이상적으로는 자동화된 방식으로).

"내일 새 패키지를 설치하려는 경우 다시 업데이트할 때까지 서버는 이에 대해 알지 못할 것입니다. 저는 데비안 서버에서만 이 사실을 알아차렸으며 이를 유발하는 어떤 조정도 알지 못합니다."

이 부분에 대해서는 잘 모르겠습니다. 내일 새로운 버전의 unison이 출시된다면 어떻게 알 수 있다는 겁니까? 마찬가지로 apt-get update를 하루에 한 번 이상(예: cron 스크립트를 통해) 실행하면 apt는 새 패키지가 있음을 알게 됩니다. 즉, 새 패키지를 사용할 수 있다는 사실을 자동으로 알려주지 않습니다. 패키지를 업그레이드하면 때때로 사용자가 해결해야 하는 시스템 안정성 문제가 발생할 수 있으므로 이는 타당한 이유가 있습니다.

일반적으로 Debian 기반 시스템에서는 점진적으로 업데이트되는 소프트웨어 버전이 반드시 더 나은 것은 아닙니다. 보안 문제가 있거나 새 버전에 필요한 기능이 없는 한 일반적으로 마이너 버전 업그레이드에는 관심이 없습니다.

답변2

일반적으로 이는 마지막 업데이트에서 얻은 정확한 버전 정보가 새 버전으로 대체되었기 때문에 데비안 서버에서 더 이상 사용할 수 없음을 의미합니다. 그러나 Squeeze에서는 이런 일이 너무 많이 발생해서는 안 됩니다(보안 업데이트를 고려하더라도). 또 다른 옵션은 /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스크립트를 한 줄씩 실행해야만 문제를 발견했습니다. 나는 여기 $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을 조금 더 빠르게 만들기 위해 로컬로 컴퓨터로 전송되고 있다는 것입니다. 전체 디렉터리를 가져오기 위해 원격 서버에 여러 번 요청하는 대신 단 한 번의 요청만 수행한 다음 필요에 따라 업데이트합니다. 다시 말하지만, 이 프로세스를 사용하면 속도가 빨라지고, 현재 사용 가능한 모든 패키지를 볼 수 있으며, 디렉터리를 로컬로 한 번만 로드하여 디렉터리를 보려고 하는 모든 사람의 부담을 덜 수 있습니다.

오랜 시간 동안 하나의 패키지만 만든다면 실제로 엄청난 시간 낭비처럼 보일 수 있지만 구현은 모든 사람에게 도움이 됩니다.

관련 정보