Пакетный менеджер 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