Продвинутое управление пакетами
TL;DR: Анализ зависимостей, поиск orphans, очистка кэша, pinning версий. Работает кроссплатформенно (apt, pacman, dnf с разным синтаксисом).
Анализ зависимостей
# Что зависит от пакета?
# apt
apt rdepends nginx
# pacman
pactree -r nginx
# dnf
dnf repoquery --whatrequires nginx# От чего зависит пакет?
# apt
apt depends nginx
# pacman
pactree nginx
# dnf
dnf repoquery --requires nginxOrphan-пакеты (ничьи зависимости)
# Найти orphans
# pacman
pacman -Qdtq
# Удалить orphans
# pacman
sudo pacman -Rns $(pacman -Qdtq)
# apt
sudo apt autoremove --purge
# dnf
sudo dnf autoremoveАнализ размера
# Самые большие пакеты
# pacman
pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4,$5,name}' | sort -rh | head -20
# apt (dpkg)
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn | head -20
# dnf
rpm -qa --queryformat '%{SIZE}\t%{NAME}\n' | sort -rn | head -20Очистка кэша
# pacman — хранит все скачанные пакеты
du -sh /var/cache/pacman/pkg/
sudo paccache -r # оставить 3 последних версии
sudo paccache -rk1 # оставить только 1
# apt
du -sh /var/cache/apt/archives/
sudo apt clean # удалить весь кэш
sudo apt autoclean # удалить старые версии
# dnf
sudo dnf clean allPinning версий (apt)
Зафиксировать версию пакета, чтобы apt upgrade не обновлял:
# Заблокировать обновление
sudo apt-mark hold package-name
# Разблокировать
sudo apt-mark unhold package-name
# Список заблокированных
apt-mark showholdДля pacman — добавить в /etc/pacman.conf:
IgnorePkg = package-nameУстановка из исходников
# Установить инструменты сборки
# Ubuntu
sudo apt install build-essential
# Arch
sudo pacman -S base-devel
# Типичный процесс
tar xzf package-1.0.tar.gz
cd package-1.0
./configure --prefix=/usr/local
make -j$(nproc)
sudo make installСовет: Устанавливайте из исходников в
/usr/local/, чтобы не конфликтовать с пакетным менеджером.
Откат версии
# pacman — из кэша
sudo pacman -U /var/cache/pacman/pkg/package-oldversion.pkg.tar.zst
# apt — указать конкретную версию
apt list -a package-name # доступные версии
sudo apt install package-name=1.2.3-1
# dnf
sudo dnf downgrade package-nameТипичные ошибки
| Ошибка | Решение |
|---|---|
| Broken dependencies | apt: sudo apt -f install. pacman: pacman -Syu |
| Конфликт файлов | pacman: --overwrite. apt: dpkg --force-overwrite |
make install мусорит в систему | Использовать --prefix=/usr/local или checkinstall |
| Пакет из PPA конфликтует | ppa-purge или вручную откатить |