APT в ALT Linux/Советы по использованию: различия между версиями
Asy (обсуждение | вклад) |
Asy (обсуждение | вклад) |
||
Строка 96: | Строка 96: | ||
который делает всё вышеперечисленное с учётом вышеперечисленных замечаний. | который делает всё вышеперечисленное с учётом вышеперечисленных замечаний. | ||
== apt-scripts: удаление дубликатов пакетов == | |||
Иногда в процессе обновления может произойти что-то непредвиденное (отключение питания например). В подобной ситуации, как правило, в базе rpm остаются двойные пакеты. В apt-scripts 0.1.4-alt1 реализована команда dedup для упрощения борьбы с такими последствиями (https://lists.altlinux.org/pipermail/sisyphus/2019-June/367974.html). Установите apt-scripts, если пакет ещё не установлен, и запустите | |||
apt-get dedup | |||
== APT совместно с /usr, смонтированным в режиме read only == | == APT совместно с /usr, смонтированным в режиме read only == | ||
Версия от 09:30, 22 сентября 2019
Сводка по обновлению
Поставьте пакет apt-printchanges и перед обновлением пакета будет выводиться его changelog.
Использование proxy
HTTP-прокси
/etc/apt/apt.conf:
Acquire::http::Proxy "http://[user[:pass]@]host[:port]/";
либо выставить переменную окружения http_proxy.
FTP-прокси
/etc/apt/apt.conf:
Acquire::ftp::Proxy "ftp://[user[:pass]@]host[:port]/";
либо выставить переменную окружения ftp_proxy.
RSYNC-прокси
/etc/apt/apt.conf:
Acquire::rsync::proxy="[user[:pass]@]host[:port]"; Acquire::rsync::proxy::hostname="none";
либо выставить переменную окружения RSYNC_PROXY.
- При использовании репозиториев на разных хостах возможно задание proxy для всех хостов и для каждого в отдельности.
- Значение для конкретного хоста перекрывает глобальное значение.
- Значение "none" указывает, что необходимо использовать прямое соединение.
Пример:
Acquire::rsync::proxy="192.168.1.1:3128"; Acquire::rsync::proxy::mirror.localdomain="none";
Будет использоваться http-proxy "192.168.1.1:3128" для всех хостов, кроме mirror.localdomain, для которого будет использоваться прямое соединение.
HTTP-прокси для проксирования FTP-запросов
Не рекомендуется из-за низкой эффективности и не поддерживается настройками в конфигурационном файле. В случае крайней необходимости - определите переменную окружения ftp_proxy в HTTP URL.
Поиск пакетов, использующих данную библиотеку
apt-cache showpkg libuuid.so.1
Обновление системы «вниз»
Внимание! Такое обновление может привести к непредсказуемым последствиям, ибо майнтейнеры пакетов не проверяют работу обновления в таких условиях.
apt-scripts: «ненужное» и «не в текущем репо»
Описано по мотивам письма at@; для начала потребуется установить пакет apt-scripts.
apt-cache list-extras
Показывает пакеты, которые отсутствуют в репозитории (совпадение по имени пакета, кроме специальных случаев типа Allow-Duplicated, в которых версия также учитывается).
Непустой вывод означает, что перечисленных пакетов больше нет в репозитории. Следовательно, эти пакеты, скорее всего, устарели или перестали собираться (и поэтому, быть может, стоит их снести). Предварительно следует обновиться до текущего состояния репозитория, так как не исключено, что их заменили какие-то новые пакеты.
apt-get remove `apt-cache list-extras | grep -v "^kernel-\(image\|modules\)\|^apt-conf\|^branding-altlinux"`
Аналогично, удаление apt-conf-*, приведёт к удалению apt, хотя это можно будет исправить доустановкой через rpm. Можно, предварительно, установить нужный apt-conf, например
apt-get install apt-conf-branch
apt-cache list-nodeps
Показывает пакеты, от которых не зависят какие-либо другие пакеты, установленные в системе. То есть эти пакеты «никому не нужны» и их можно удалить с помощью rpm -e.
Среди этого списка можно обнаружить неиспользуемые библиотеки, примерно так:
$ apt-cache list-nodeps |grep '^lib[^-]*$' libgtk+mdk libmysqlclient10 [...]
Эти библиотеки, вероятно, стоит снести:
$ apt-cache list-nodeps |grep '^lib[^-]*$' |grep -v libreoffice |xargs -r sudo rpm -e
Аналогично можно поступить с неиспользуемыми модулями (^python-, ^perl-, ...), если не устанавливали что-либо самостоятельно с целью получения дополнительной функциональности.
Проще всего использовать
$ epm autoremove
который делает всё вышеперечисленное с учётом вышеперечисленных замечаний.
apt-scripts: удаление дубликатов пакетов
Иногда в процессе обновления может произойти что-то непредвиденное (отключение питания например). В подобной ситуации, как правило, в базе rpm остаются двойные пакеты. В apt-scripts 0.1.4-alt1 реализована команда dedup для упрощения борьбы с такими последствиями (https://lists.altlinux.org/pipermail/sisyphus/2019-June/367974.html). Установите apt-scripts, если пакет ещё не установлен, и запустите
apt-get dedup
APT совместно с /usr, смонтированным в режиме read only
/etc/apt/apt.conf:
RPM { Pre-Invoke {"mount -o remount,rw /usr";}; Post-Invoke {"mount -o remount,ro /usr";}; }
работает в 4.0, в 4.1, начиная с некоторого времени, что-то сломалось (появились файлтриггеры?) и после установки пакетов выдает ошибки типа такого
Done. mount: /usr is busy E: Sub-process mount -o remount,ro /usr returned an error code (32) E: Problem executing scripts RPM::Post-Invoke 'mount -o remount,ro /usr' E: Sub-process returned an error code
Hold пакета (Заблокировать версию пакета)
Иногда требуется предотвратить обновление какого-то пакета, например, nxclient. Это можно сделать при помощи synaptic (Пакет - Заблокировать версию) и aptitude (aptitude hold nxclient). Но это не остановит апдейт в случае использования традиционного apt-get upgrade (dist-upgrade). Чтобы решить эту проблему, создаём файл типа 90-apt-hold в каталоге /etc/apt/apt.conf.d/ (или просто редактируем apt.conf) cо следующим содержимым:
# cat /etc/apt/apt.conf.d/90-apt-hold.conf RPM::Hold { nxclient; };
Холд установлен. Также можно посмотреть подобный вариант в /etc/apt/apt.conf.d/apt.eter.conf и почитать эту статью.
Установка виртуального пакета без вопросов о конкретном варианте
Порой apt спотыкается о наличие нескольких вариантов реальных пакетов, предоставляющих один и тот же затребованный виртуальный; если понимаете, что делаете (бишь хотите ровно старший), можно воспользоваться подсказкой zerg@:
apt-get -o APT::Install::VirtualVersion=true -o APT::Install::Virtual=true install gcc
Удаление группы пакетов
Заготовка команды с фильтром для удаления группы пакетов, поставленных apt или rpm, но не aptitude:
# apt-get remove $(awk '/^May 25 17:34/ {on=1} {if (on) { print substr($6,1,match($6,"-digit:")-1) }}' /var/log/user/info)
Команда для удаления -devel пакетов. По зависимостям может удалить некоторые обычные пакеты, от них зависящие. Например компиляторы (так же см altbug #35600); аналогично можно удалять -debuginfo пакеты:
# apt-get remove `rpm -qa --qf '%{NAME}\n' | grep -- "-devel$"`
Команда, полностью аналогичная предыдущей, но параметр --qf от rpm заменён на вызов sed:
# apt-get remove `rpm -qa | sed "s/-[^-]\+-[^-]\+$//"| grep -- "-devel$"`
apt-get upgrade
Несмотря на то, что команда upgrade существует, использовать её следует осторожно, либо не использовать вовсе. Цитата из "ALT Linux Master 2.0. Руководство системного администратора":
Иногда, однако, происходит изменение в именовании пакетов или изменение их зависимостей. Такие ситуации не обрабатываются командой apt-get upgrade, в результате чего происходит нарушение целостности системы: появляются неудовлетворенные зависимости. Например, переименование пакета MySQL-shared, содержащего динамически загружаемые библиотеки для работы с СУБД MySQL, в libMySQL, отражая общую тенденцию к наименованию библиотек в дистрибутиве, не приводит к тому, что установка обновленной версии libMySQL требует удаления старой версии MySQL-shared. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade.
Команда заблокирована по-умолчанию, начиная с apt 0.5.15lorg2-alt67: altbug #30867.