Пакеты и пакетные менеджеры
Что такое пакет
Пакет — архив с файлами программы плюс метаинформация, позволяющая системе управлять программой: устанавливать, обновлять, удалять, проверять.
Package: nginx
Version: 1.24.0-2
Architecture: amd64
Depends: libc6 (>= 2.34), libssl3 (>= 3.0.0), nginx-common (= 1.24.0-2)
Conflicts: nginx-extras
Description: small, powerful, scalable web/proxy server
RPM-пакеты устроены аналогично: заголовок с метаданными и скриптлетами (%pre, %post, %preun, %postun) и сжатый архив файлов.
Два уровня инструментов
| Debian, Ubuntu | Red Hat, Fedora, ALT | |
|---|---|---|
| формат | .deb |
.rpm |
| низкий уровень: ставит один файл, проверяет зависимости, но не скачивает их | dpkg |
rpm |
| высокий уровень: репозитории, разрешение зависимостей, обновление системы | apt |
dnf (yum), в ALT — apt-rpm |
# Debian / Ubuntu
sudo apt update # обновить индексы репозиториев
sudo apt install nginx # установить с зависимостями
sudo apt remove nginx # удалить, оставив конфигурацию
sudo apt purge nginx # удалить вместе с конфигурацией
sudo apt install --reinstall nginx # переустановить
dpkg -l | grep nginx # список установленных
dpkg -L nginx # файлы пакета
dpkg -S /usr/sbin/nginx # чей файл
# Fedora / RHEL
sudo dnf install nginx
sudo dnf reinstall nginx
rpm -qa | grep nginx
rpm -ql nginx
rpm -qf /usr/sbin/nginx
rpm -V nginx # проверить файлы пакета
Зависимости и репозитории
Репозиторий — сервер с пакетами и подписанным индексом. Высокоуровневый менеджер по индексу строит граф зависимостей: nginx требует libssl3, тот — libc6 и т. д. Учитываются версии, конфликты, «виртуальные» пакеты (Provides: mail-transport-agent).
Подписи (GPG) защищают от подмены пакетов: менеджер откажется ставить пакет с неверной подписью.
База установленных пакетов
Менеджер помнит, какой файл какому пакету принадлежит и в каком состоянии пакет:
- dpkg:
/var/lib/dpkg/status, списки файлов в/var/lib/dpkg/info/<пакет>.list, скрипты — там же; - rpm: база в
/var/lib/rpm.
Благодаря этому можно:
- удалить программу без следов;
- обновить, заменив старые файлы новыми;
- проверить целостность:
debsums nginxилиrpm -V nginxпокажут изменённые или пропавшие файлы.
Итог
- Пакет = файлы + метаинформация (версия, зависимости, conffiles, скрипты).
dpkg/rpmработают с отдельными пакетами;apt/dnf— с репозиториями и зависимостями.- База пакетов знает принадлежность файлов: удаление, обновление, проверка целостности.
Практика решено 0 из 5
Что входит в метаинформацию пакета?
Низкоуровневый или высокоуровневый инструмент?
| Низкоуровневый (один пакет-файл) | Высокоуровневый (репозитории, зависимости) | |
|---|---|---|
| dpkg | ||
| apt / apt-get | ||
| rpm | ||
| dnf / yum | ||
| Сам скачивает и ставит недостающие зависимости |
Какой командой Debian/Ubuntu посмотреть, какому пакету принадлежит файл /bin/ls? (команда целиком)
Расставьте действия apt install nginx по порядку:
- Вычислить зависимости и составить план: какие пакеты установить
- Записать состояние пакетов в базу dpkg (/var/lib/dpkg/status)
- Передать пакеты dpkg: распаковать файлы, выполнить скрипты пакета
- Скачать .deb-файлы и проверить их подписи и контрольные суммы
-
Прочитать индексы репозиториев (обновлённые
apt update) и найти пакет nginx
Чем установка из пакета лучше make install из исходников?
Войдите, чтобы отмечать пройденные уроки.