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

60

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

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

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

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

TrungDQ
источник
см. также: askubuntu.com/questions/110988/…
lesmana
Также посетите askubuntu.com/questions/481241/...
Pandya
посетить wiki.debian.org/Apt для получения более подробной информации
Pandya
2
С 14.04 apt-getзаменяется apt. Замена не завершена, но она работает install, upgradeи dist-upgradeсреди других.
Пэдди Ландау
@PaddyLandau Это замена или утилита extra / wrapper?
Муру

Ответы:

49

Главным образом, apt-getделает следующие вещи:

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

dpkg будем:

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

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

$ 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
Мур
источник
30

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

Longer:

Отборочные:

Из справочной страницы :

Все пакеты, требуемые пакетами, указанными для установки, также будут извлечены и установлены.

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

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

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

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

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

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

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

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

монтаж

Также есть больше control-файлов, наиболее важными из которых являются следующие:

хаос
источник
11

Для того, чтобы по-настоящему скрыться, вам нужно взять источник 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но это глубокий колодец. Вы могли бы провести дни, разгадывая это.

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

Оли
источник
6

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

L0j1k
источник
1
Спасибо за вашу точку зрения. В контейнере Docker я установил Firefox, а на другой вкладке терминала я внимательно следил за разницей в контейнере и узнал, что все файлы меняются в контейнере. Это помогло мне понять более четко.
abhy