Авторские статьи

Секреты пакетного менеджемента.


Каким бы инструментом в обычной практике мы не пользовались для установки, обновления и удаления пакетов в системах Linux с пакетным менеджментом, всегда есть интересные опции у команд и малоизвестные команды, которые помогут в необычных ситуациях. В статье рассматриваются linux системы, использующие формат пакетов deb и соответствующий инструментарий по работе с ним.

Взаимосвязи dpkg dselect apt

Удаление ошмёток.

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

Выводим удалённые пакеты, с сортировкой по убыванию размера, о которых остались запись в базе данных dpkg.

LANG=C dpkg-query --show --showformat='${Package;-50}\t${Installed-Size} ${Status}\n' | sort -r -k 2 -n |grep deinstall

Выполните команду:

sudo apt-get --simulate purge `LANG=C dpkg-query --show --showformat='${Package;-50}\t${Installed-Size} ${Status}\n' | grep -F deinstall | sort -r -k 2 -n | cut -f 1`

и вам покажут, какие пакеты из команды dpkg-query --show будут вычищены вместе с ошмётками конфигурационных файлов и будет удалено любое упоминание в базе данных dpkg. Параметр --simulate, как говорит его название, симулирует, но не выполняет в реале действие. Подумайте хорошенько, сверьте выводы команд и, на свой страх и риск, уберите --simulate, чтобы purge реально вычистил вашу систему от удалённых пакетов, как бы глупо это не звучало.

Оставьте мне ядро. Одно. Текущее.

Во многих дистрибутивах Linux есть механизм установки нового ядра linux. В Debian и Ubuntu используется метапакет linux-image-generic, который всегда указывает на новые ядра в репозитории, и метапакет linux-headers-generic, который указывает на заголовочные файлы последнего ядра. Опять таки, со временем, ядер становится больше и больше ставится заголовочных файлов, которые больше всех пожирают дисковое пространство.

Есть команда, которая одним махом семерых побивахом, то есть удалит пакеты, с лишними ядрами и заголовочными файлами, кроме текущего. Команда опасна по своей природе и поэтому страхуйтесь всегда.

Сначала обновите систему и перезагрузитесь. Командой uname -r подверьтесь с версией текущего ядра.

Выполните dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1

И сами убедитесь, что в выводе нет вашего ядра. А теперь команда sudo apt-get --simulate purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)

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

Наши репозитория.

Все используемые репозитория в системе
sudo grep -RvE "(^#|^$)" /etc/apt/sources.list /etc/apt/sources.list.d/*.list

Вывести репозитория, у которых есть упоминание не про наш релиз.
sudo grep -RvE "(^#|^$)" /etc/apt/sources.list /etc/apt/sources.list.d/*.list | grep -v `lsb_release -sc`

Идеального решения нет, так как сторонние репозитория могут не заморачиваться и для многих систем, основанных на работе apt, сделать репозиторий в стиле
deb http://dl.google.com/linux/chrome/deb/ stable main

Но вышестоящая команда поможет показать такие НЕ-ВАШЕГО-РЕЛИЗА репозитория и вы уже сами решите: всё правильно или вы забыли изменить запись.

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

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `sudo apt-get update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`

Запросы.

"Ну и запросы у вас..." - сказала база данных и повисла.

  • Самые большие пакеты в вашей системе по размеру. Выводимую цифру не воспринимайте как истину в последней инстанции, а воспринимайте как некий вес.
    dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn | head -n 25
  • При поиске нужного пакета можно и нужно использовать метасимволы: ^ - начало, $ - конец.
    Сравните:

    • Ищу чисто сам язык программирования PHP5 apt-cache search ^php5$
    • Ищу любое упоминание про php5 apt-cache search php5
  • А такой-то пакет установлен в моей системе? На примере браузера Firefox dpkg -l | grep -i firefox

Если проблемы с пакетами.

Одна из часто совершаемых ошибок, состоит в том, что человек удаляет какие-либо конфигурационные файлы в каталоге /etc/ и потом у него возникают проблемы при удалении или обновлении пакета. Можно попробовать форсированно переставить пакет с установкой конфигурационных файлов из пакета: sudo apt-get -o DPkg::options::=--force-confmiss --reinstall install ПАКЕТ_ПРОГРАММЫ

Есть команды, которые помогают при проблемах с пакетами. Ситуация обычна такова: вам не дают ни поставить, ни удалить. Столкнуть ситуацию с мёртвой точки помогут:

sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get upgrade -f
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade

Дополнительные материалы:
Репозитории Ubuntu.
Установка программ в Ubuntu.

Дата последней правки: 2014-12-09 11:38:30

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта