Что делает apt-get install под капотом?

51

Что делает команда apt-get install ... ?

Когда я ввожу команду apt-get install ... , на экране появляются некоторые тексты, но для меня не хватает информации. Я хочу знать, если какой-либо файл создан / отредактирован, любая служба запущена и другие действия ...

Происходит ли файл .sh при запуске apt-get install ... ? Если да, то как я могу увидеть содержимое этого файла sh ?

Причина этого вопроса - недавно я попытался установить tomcat7 с apt-get install tomcat7 . Все работает нормально до тех пор, пока я не установлю tomcat7-admin (менеджерское веб-приложение), сервер не ответил на любой запрос. Я пробовал это много раз, и это всегда случается.

    
задан TrungDQ 24.10.2014 в 12:20
источник

4 ответа

46

В основном, apt-get выполняет следующие действия:

  • проверяет наличие зависимостей (и просит их установить),
  • загружает пакет, проверяет его, а затем сообщает dpkg , чтобы установить его.

dpkg будет:

  • извлеките пакет и скопируйте контент в нужное место и проверьте наличие на нем ранее существующих файлов и модификаций,
  • запустите скрипты сторонних разработчиков : preinst , postinst , (и prerm , postrm до этого, если пакет обновляется)
  • выполнить некоторые действия на основе триггеров .

Вам могут быть интересны сценарии сопровождающего, которые обычно находятся в /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst} . Обычно это shell-скрипты, но нет жесткого правила. Например:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm
    
ответ дан muru 24.10.2014 в 12:30
источник
28

Короче : apt-get install делает все, что необходимо, чтобы ваша система могла успешно выполнить новое установленное программное приложение.

Дольше:

Отборочные:

На странице manpage :

  

Все пакеты, необходимые для пакета (ов), указанного для установки   также будут восстановлены и установлены.

Эти пакеты хранятся в репозитории в сети. Итак, apt-get загружает все необходимые во временный каталог ( /var/cache/apt/archives/ ). Они будут загружены с веб-сервера или ftp-сервера. Они указаны в так называемом sources.list ; список репозиториев. С тех пор они устанавливаются один за другим процедурно.

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

Каждый пакет проходит процедуру установки.

Установка пакета:

В дистрибутивах Linux на базе Debian, как Ubuntu, эти пакеты находятся в определенном стандартизованном формате: deb - The Формат двоичного пакета Debian .

Такой пакет содержит файлы, которые должны быть установлены в системе. Кроме того, они содержат файл управления . Этот файл содержит сценарии, которые система упаковки должна выполнять в конкретной ситуации; так называемые скрипты сопровождающего . Эти сценарии разделены на:

  • preinst : перед установкой файлов в файловую иерархию систем
  • postinst : после установки
  • prerm : перед удалением
  • postrm : после удаления

Есть интересная картина, показывающая процедуру установки нового пакета:

Есть также больше файлов управления, наиболее важными являются следующие:

ответ дан chaos 24.10.2014 в 13:44
9

Для фактического материала under-the-hood вам нужно будет захватить источник Apt. Достаточно просто, если у вас есть исходные репозитории:

apt-get source apt

Команда apt-get живет в cmdline/apt-get.cc . Это боль, которую можно прочитать, но большинство действий apt-get подробно изложены там. Однако установка сопоставляется через функцию DoInstall , которая живет в apt-private/private-install.{cc,h} .

Вы должны помнить, что apt-get - это только одна сторона монеты.
dpkg обрабатывает фактическую установку, но DoInstall не знает о dpkg напрямую. apt-get на самом деле на удивление агностик-менеджер пакетов. Вся функциональность абстрагируется через apt-pkg/package-manager.cc

Я просто смотрю кратко, но даже там я не вижу, что это действительно придает системе dpkg . Некоторые из них, кажется, автоконфигурируются через apt-pkg/aptconfiguration.cc , но это глубокий колодец. Вы могли бы потратить дни, распутывая это.

Исходная документация хороша. Вы можете делать хуже, чем просматривать каждый файл и читать заголовок, чтобы понять, что на самом деле происходит.

    
ответ дан Oli 24.10.2014 в 13:04
6

Здесь есть некоторые фантастические ответы, которые лучше этого короткого, но что-то, что вы могли бы подумать, чтобы помочь вам лучше понять изменения, сделанные менеджером пакетов, - это Docker . Вы можете различать изменения, сделанные в контейнере, используя docker diff <container> , и он покажет вам все изменения. Это особенно полезно для просмотра под капотом, чтобы узнать, что apt-get install делает для системы. Быстрый поиск даст вам несколько , чтобы помочь реализовать это.

    
ответ дан L0j1k 25.10.2014 в 22:52