Почему файлы deb находятся в / var / cache / apt / archives /?

Ответы:

21

Исходная информация

В Ubuntu есть две вещи (и в Debian, на которых основан Ubuntu), которые обычно называются «диспетчером пакетов»: dpkgи APT.

dpkgэто программа, которая устанавливает и удаляет пакеты и поддерживает базу данных о том, какие пакеты установлены, в каких версиях. Когда он устанавливает пакеты, он делает это из .debархивных файлов. Эти архивы являются способом распространения пакетов.

dpkgделает больше, чем просто копирует (или удаляет) файлы и обновляет свою базу данных - он также запускает сценарии установки и сценарии удаления. Это можно считать довольно сложным. Но он не найдет и не загрузит пакеты.

APT находит и загружает пакеты и запускается dpkgсоответствующим образом для их установки, обновления и удаления. APT на самом деле не представляет собой отдельную часть программного обеспечения, хотя есть пакет aptУстановить апт , который обеспечивает его основные части.

APT включает в себя библиотеку ( libapt-pkg ), которая обеспечивает базовую функциональность, доступ к которой осуществляется различными инструментами. Некоторые такие инструменты, например apt-get, также предоставляются пакетом aptУстановить апт . Другие инструменты устанавливаются отдельно. APT также предоставляет различные файлы конфигурации, которые управляют работой своей базовой библиотеки и программ, которые ее используют.

Более того, APT - это система для хранения и извлечения данных о том, какие источники программного обеспечения предоставляют какие пакеты, в каких версиях, и для действий с этими данными для автоматического выполнения задач управления пакетами, таких как установка и обновление пакетов. Это включает в себя отслеживание того, какие пакеты необходимы для работы других пакетов, и автоматический выбор и установка соответствующих пакетов для удовлетворения этих зависимостей.

Например, когда я говорю apt-getутилите установить пакет chocolate-doomУстановить шоколад-дум , она выясняет, какие другие пакеты должны быть установлены, чтобы она работала, и автоматически получит и установит их:

$ sudo apt-get install chocolate-doom
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  doom-wad-shareware libmikmod3 libsdl-mixer1.2 libsdl-net1.2 libsdl1.2debian
Recommended packages:
  doom-engine
The following NEW packages will be installed:
  chocolate-doom doom-wad-shareware libmikmod3 libsdl-mixer1.2 libsdl-net1.2
  libsdl1.2debian
0 upgraded, 6 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B/2,846 kB of archives.
After this operation, 8,626 kB of additional disk space will be used.

Графические инструменты, такие как Центр программного обеспечения, Software Updater / Update Manager и Synaptic, выполняют функции, аналогичные apt-get. Они также используют систему APT - посредством комбинации соблюдения ее правил и использования функциональных возможностей, предоставляемых базовыми библиотеками - для изменения установленных пакетов, чтобы дать пользователю то, что он (обычно) хочет, таким образом, чтобы все (обычно) продолжают работать.

Как и когда используется /var/cache/apt/archivesпапка

Когда apt-get, aptitude, Центр программного обеспечения , Synaptic , Updater Менеджер обновлений / Программное обеспечение или любые другие утилиты управления пакетами загрузки пакетов (и другие пакеты , они зависят от) из сконфигурированных источников программного обеспечения и устанавливает их, загруженные пакеты (т.е. архивные файлы .deb из которого они установлены) хранятся в /var/cache/apt/archives.

Если у вас есть файл .deb на диске, и вы устанавливаете его с помощью dpkg, это не означает, что его копия будет сделана в /var/cache/apt/archives. Но когда программа, которая использует или внедряет систему автоматического разрешения зависимостей APT и поиска пакетов, загружает пакеты, именно там они и сохраняются.

Несмотря на то, что файлы .deb для автоматически загружаемых пакетов хранятся и устанавливаются из них /var/cache/apt/archives, они фактически не загружаются непосредственно в это место. Вместо этого неполные (т. Е. В процессе) загрузки файла .deb существуют в, /var/cache/apt/archives/partialа затем перемещаются в него /var/cache/apt/archivesпосле завершения.

Файлы пакета .deb остаются в кэше /var/cache/apt/archivesдаже после успешной установки на случай, если они понадобятся для будущего использования. Но вы можете безопасно удалить файлы .deb, которые достаточно стары, с которыми они вряд ли понадобятся снова sudo apt-get autoclean, или полностью очистить кэшированные .debфайлы sudo apt-get clean. Смотрите man apt-getдля получения дополнительной информации.

Чтобы проиллюстрировать функции sudo apt-get autocleanи аналогичные команды, а также определить, хотите ли вы их запускать, вы можете смоделировать их действия, выполнив затем с -sфлагом. Лучше всего , чтобы передать этот флаг , прежде чем в autoclean(любой другой или) глагол действия. Это обычно не нужно запустить программу как корень с sudoпри использовании -s, поскольку никаких реальных изменений не производится.

Например, в моей системе:

$ apt-get -s autoclean
NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Del libubsan0 4.9.1-15ubuntu1 [83.7 kB]
Del cups-server-common 1.7.5-3 [519 kB]
Del python2.7 2.7.8-9 [205 kB]
Del g++-4.9 4.9.1-15ubuntu1 [17.4 MB]
Del libstdc++-4.9-dev 4.9.1-15ubuntu1 [1,121 kB]
    ....

Перечисленные пакеты не будут удалены ; вместо этого удаляются только кэшированные файлы .deb. (На самом деле ничего не произошло, когда я выполнил эту команду, поскольку это была просто симуляция.)

Другие загруженные файлы

Программное обеспечение, установленное через dpkg(через APT или иным способом), на самом деле не запускается из файла .deb, который его предоставляет. Как отмечено в разделе «Дополнительная информация », извлекаются файлы .deb. Вот почему они могут быть удалены, и установленный пакет продолжает функционировать.

Файлы во всей системе, которые устанавливаются из пакетов .deb, не загружаются в их текущее местоположение, а извлекаются из них из файлов .deb, которые их предоставляют (или, возможно, специально создаются во время установки или после нее, как в случае для некоторых файлов конфигурации).

Но файлы .deb - не единственные файлы, загружаемые утилитами управления пакетами. Часто загружаются другие файлы, которые предоставляют информацию о том, где существуют пакеты.

Например, когда я бегу sudo apt-get update, вывод включает в себя такие строки:

Get:13 http://us.archive.ubuntu.com utopic/main i386 Packages [1,341 kB]

Это означает, что файл, такой как http://us.archive.ubuntu.com/ubuntu/dists/utopic/main/binary-amd64/Packages.bz2, был загружен и проверен, чтобы помочь обновить базу данных APT информацией о доступных пакетах ( и в каких версиях) из этого конкретного источника программного обеспечения. Вы можете найти файлы Packages и другие подобные файлы в /var/lib/apt/listкаталоге. Копии, хранящиеся там, имеют такие отличительные имена, как us.archive.ubuntu.com_ubuntu_dists_utopic_main_binary-amd64_Packages, например , таких файлов может быть много.

Вы спрашивали о apt-cacheконкретно. Он запрашивает базу данных пакетов, но не вносит никаких изменений в систему и не загружает какие-либо файлы.

Загруженные файлы, относящиеся к Центру программного обеспечения

Когда Ubuntu Software Center загружает данные для своего собственного использования, специфичные для него и не относящиеся к общим dpkgфункциям APT (или ), он сохраняет их в /var/cache/software-center.

Например, в моей системе (и в большинстве систем) эта папка содержит xapianподпапку:

ek@Ilex:/var/cache/software-center/xapian$ ls
flintlock       postlist.baseB  record.baseB    spelling.baseB  termlist.baseB
iamchert        postlist.DB     record.DB       spelling.DB     termlist.DB
postlist.baseA  record.baseA    spelling.baseA  termlist.baseA

Центр программного обеспечения использует Xapian для индексации информации для быстрого поиска.

Загруженные файлы для других связанных утилит

Некоторые дополнительные утилиты, которые работают с системой APT, загружают и сохраняют файлы как часть своей работы. apt-fileпо умолчанию не устанавливается в Ubuntu, но может быть установлен из пакета apt-fileУстановить apt-файл .

apt-fileхранит информацию о том, какие файлы предоставляются какими пакетами (даже для пакетов, которые не установлены локально). Он получает эту информацию о содержимом пакетов, загружая сжатые Contentsфайлы:

$ sudo apt-file update
Downloading complete file http://us.archive.ubuntu.com/ubuntu/dists/utopic/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 29.6M  100 29.6M    0     0   856k      0  0:00:35  0:00:35 --:--:--  832k

Когда apt-file updateзапускается от имени пользователя root (как указано выше), эти файлы загружаются в /var/cache/apt/apt-fileкаталог. Чтобы узнать это, я побежал:

$ sudo updatedb
$ locate Contents-amd64
/var/cache/apt/apt-file/us.archive.ubuntu.com_ubuntu_dists_utopic-proposed_Contents-amd64.gz
/var/cache/apt/apt-file/us.archive.ubuntu.com_ubuntu_dists_utopic_Contents-amd64.gz

Обратите внимание, что информация, представленная в этом посте, дает ряд примеров файлов данных, загружаемых и сохраняемых утилитами управления пакетами в Ubuntu, но не должна рассматриваться как исчерпывающий список случаев, когда такие файлы используются и хранятся.

Элия ​​Каган
источник
Благодарю. Делаете apt-cache или / и apt-fileтакже загружаете много вещей? Если да, где они?
Тим
Что значит «Но когда программа, которая использует или реализует систему автоматического разрешения зависимостей APT и загрузки пакетов, загружает пакеты, именно там они и хранятся». жадный?
Тим
@Tim Я значительно расширил свой ответ, и надеюсь, что правильно ответит на эти вопросы (и даже больше). Как всегда, ваши отзывы приветствуются, особенно если что-то неясно.
Элия ​​Каган
Благодаря "apt-cache запрашивает базу данных пакета", база данных находится в сети или на локальном компьютере? Нужен ли apt-cache доступ в интернет?
Тим
1
@ Ориан (я рад, что этот ответ помог!) Вы можете нажать на звездочку на вопросе. Это чуть ниже оценки вопроса и стрелок голосования. Тогда возникает вопрос , в своем профиле в избранной вкладке. Только вопросы могут быть одобрены. В случае с этим ответом, он в настоящее время единственный на вопрос. Другие могут быть опубликованы - хотя вы, возможно, захотите посмотреть на них, так как иногда новые ответы содержат информацию о новых событиях в теме. Вы можете использовать закладки вашего браузера, которые работают даже для ответов. Используйте ссылку « Поделиться» под ответом, чтобы открыть страницу с конкретным ответом.
Элия ​​Каган