Що робить apt-get install під кришкою?


60

Що робить apt-get install ...команда?

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

Чи є якийсь .shфайл, виконаний під час apt-get install ...запуску? Якщо так, то як я можу бачити вміст цього shфайлу?

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


дивіться також: 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 Це заміна належної чи додаткова утиліта / обгортка?
муру

Відповіді:


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чи все, що потрібно, щоб ваша система змогла успішно виконати нову встановлену програму.

Довше:

Попередні запитання:

З сторінки керівництва :

Усі пакунки, необхідні пакетам, зазначеним для встановлення, також будуть вилучені та встановлені.

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

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

Кожен пакет проходить процедуру встановлення.

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

У дистрибутивах Linux на базі Debian, як Ubuntu, ці пакети знаходяться у визначеному стандартизованому форматі під назвою: deb - Бінарний формат пакунків Debian .

Такий пакет містить файли, які потрібно встановити в системі. Також вони містять контрольний файл . Цей файл містить сценарії, які система упаковки повинна виконувати в певній ситуації; так звані сценарії підтримки . Ці сценарії розбиті на:

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

Є цікава картинка, що показує процедуру установки нового пакета:

установка

Також є більше файлів управління, найважливішими є такі:

  • control: Список залежностей та інша корисна інформація для ідентифікації пакету
  • conffiles: Список конфігураційних файлів (зазвичай ті , в /etc)
  • debian-binary: містить версію деб-пакету, на даний момент 2.0
  • md5sums: Список md5сумів кожного файлу в пакеті для перевірки
  • templates: Файл із описом помилок та діалогами під час встановлення

11

Для реальних матеріалів, що знаходяться під кришкою , вам потрібно буде захопити джерело Apt. Досить просто, якщо у вас включені джерельні сховища:

apt-get source apt

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

Ви повинні пам’ятати, що підхоплення - це лише одна сторона монети.
dpkgобробляє фактичну установку, але DoInstallне знає про це dpkgбезпосередньо. apt-getнасправді напрочуд агностик-менеджер пакунків. Уся функціональність абстрагована наскрізьapt-pkg/package-manager.cc

Я дивлюся лише коротко, але навіть там я не бачу, де це насправді пов’язано із dpkgсистемами. Деякі з цього, здається, автоматично налаштовані, apt-pkg/aptconfiguration.ccале це глибокий колодязь. Ви могли витратити дні, розгадуючи це.

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


6

Тут є кілька фантастичних відповідей, які кращі за цей короткий, але щось, що ви можете розглянути, щоб допомогти вам краще зрозуміти зміни, внесені менеджером пакунків, - це Докер . Ви можете відрізняти зміни, внесені в контейнер, docker diff <container>і він покаже всі зміни. Це особливо корисно, якщо заглянути під капот, щоб побачити, що apt-get installстосується системи. Швидкий пошук допоможе вам здійснити декілька ресурсів .


1
Дякую за те, що ви поставили свою думку. У контейнері Docker я встановив firefox, а на іншій вкладці терміналу я уважно стежив за різницею контейнера і дізнався, що всі файли змінюються в контейнері. Це допомогло мені зрозуміти більш чітко.
абхи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.