Прикладная демонология, практические рецепты

Пакетный менеджер pkg

Разработка пакетного менеджера ведется в GitHub.

Основные команды

pkg help                     # справка по командам
pkg help install             # справка по конкретной команде

pkg info bash                # общая информация о пакете по имени
pkg info shells/bash         # общая информация о пакете по origin
pkg info -f bash             # развернутая информация о пакете
pkg info -o bash             # origin пакета по имени
pkg info -rd bash            # прямые и обратные зависимости

pkg which /usr/local/bin/mc  # поиск пакета к которому принадлежит локальный файл

pkg update -f                # форсированное обновление индекса репозитория (обычно не требуется)

pkg search -i bash           # простой поиск пакета в репозитории по имени

pkg install ftp/curl         # установка пакета из репозитория по origin
pkg add ./curl-7.31.0_1.txz  # установка пакета из локального файла

pkg delete ftp/curl          # удаление пакета по origin

pkg audit -F                 # аудит установленных пакетов на предмет известных уязвимостей

pkg upgrade                  # обновление пакетов из репозитория

pkg query -e%#r=0 %o         # список пакетов, без восходящих зависимостей (листья в дереве зависимостей)

Переключение системы на работу с пакетами

# создаем правильный конфиг
mkdir -p /usr/local/etc/pkg/repos
cat > /usr/local/etc/pkg/repos/default.conf
"default" {
    "url": "http://pkg.4rt.ru/${ABI}-2014Q4-minimal",
    "enabled": true
}
<Ctrl-D>

# форсированно обновляем индекс
pkg update -f

# запоминаем все пакеты, которые установлены в данный момент
pkg info -aqo | sort | grep -v '^ports-mgmt/pkg$' > /tmp/2delete

# запоминаем все листья в дереве зависимостей
pkg query -e%#r=0 %o | sort > /tmp/2install

# редактируем /tmp/2install на предмет выкидывания явно не нужного
vim /tmp/2install

# проверяем, что все нужное имеется в репозитории
xargs pkg install -ny < /tmp/2install

# удаляем все намеченное
xargs pkg delete < /tmp/2delete

# на всякий случай удаляем мелкий мусор
rm -rf /usr/local/lib/perl* /usr/local/lib/python*

# ставим все намеченное
xargs pkg install -y < /tmp/2install

# проверяем установленность всего минимально необходимого
/usr/local/leitung/bin/pkgcheck.sh 

# чистовая проверка
pkg update -f
pkg upgrade

# очистка кеша пакетов
pkg clean -ay

# выкатываем полную конфигурацию хоста
ansible-playbook 42.yml -l host -D

# рестартуем необходимых демонов и смотрим в их логи
fgrep _enable /etc/rc.conf
/usr/local/etc/rc.d/foo restart

# либо делаем полный рестарт джейла
ezjail-admin restart myjail

Переключение на другой репозиторий пакетов

# меняем URL репозитория
vim /usr/local/etc/pkg/repos/default.conf

# форсированно обновляем индекс
pkg update -f

# обновляем сам pkg
pkg install -y pkg

# удаляем зависшие промежуточные пакеты
pkg autoremove -y

# очищаем кеш старых пакетов
pkg clean -ay

# проверям доступность новых версий всех установленных пакетов в новом репозитории
pkg version -l\?

# делаем форсированную переустановку всех пакетов
pkg upgrade -fy

# очищаем кеш пакетов
pkg clean -ay

# удаляем зависшие промежуточные пакеты (они могли образоваться в результате обновления)
pkg autoremove -y

# выкатываем полную конфигурацию хоста
ansible-playbook 42.yml -D -l myhost

# делаем полный рестарт джейла или всех демонов
ezjail-admin restart myjail