Система pkgsrc
Содержание
- Содержание
- Получение pkgsrc
- Просмотр версии pkgsrc
- Обновление pkgsrc
- Переключение на другую версию pkgsrc
- Развёртывание системы
- Получение pkgsrc-wip
- Приоритет программ из pkgsrc
- Изменение пути к базе данных установленных пакетов
- Поиск пакетов
- Просмотр информации о пакете
- Просмотр опций пакета и его зависимостей
- Скачивание исходных текстов
- Проверка целостности исходных текстов
- Наложение заплат
- Распаковка исходных текстов
- Настройка опций сборки
- Сборка исходных текстов
- Сборка пакета
- Установка пакета
- Удаление сборочных файлов
- Отслеживание уязвимостей
- Решение проблем
- Цели make
- Использованные материалы
Получение pkgsrc
Скачиваем архив с системой package sources:
# cd /usr
# ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2020Q3/pkgsrc.tar.xz
Распакуем скачанный архив:
# tar xJvf pkgsrc.tar.xz
Просмотр версии pkgsrc
Посмотреть версию коллекции пакетов pkgsrc можно заглянув в файл CVS/Tag
.
Обновление pkgsrc
Обновим распакованные файлы с помощью cvs
:
# cd /usr/pkgsrc
# cvs update -dP
Переключение на другую версию pkgsrc
Для переключения на другую стабильную версию коллекции пакетов pkgsrc можно воспользоваться следующими командами:
# cd /usr/pkgsrc
# cvs update -rpkgsrc-2020Q4
Для переключения на текущую версию pkgsrc можно воспользоваться следующими командами:
# cd /usr/pkgsrc
# cvs update -A
Развёртывание системы
Перед использованием системы нужно осуществить её первоначальное развёртывание. Для этого нужно перейти в каталог /usr/pkgsrc/bootstrap
и выполнить скрипт bootstrap
, вот так:
# cd /usr/pkgsrc/bootstrap
# ./bootstrap
В числе прочих пакетов будет установлен пакет pkg_install
с инструментами pkg_add
, pkg_admin
, pkg_create
, pkg_delete
, pkg_info
в каталоге /usr/pkg/sbin/
.
Получение pkgsrc-wip
Кроме основного репозитория pkgsrc существует специальный репозиторий wip - work in progress. В этот репозиторий помещают ещё не готовые пакеты, находящиеся в разработке. В нём бывает можно найти пакеты, которые давно не обновляются, но что не умаляет их ценности (например, socklogd
или mathopd
). Для скачивания этого репозитория можно воспользоваться следующими командами:
# cd /usr/pkgsrc
# git clone git://wip.pkgsrc.org/pkgsrc-wip.git wip
Приоритет программ из pkgsrc
По умолчанию при поиске программ без указания полного пути к ним отдаётся приоритет тем программам, которые имеются в базовой поставке. Чтобы при установке одноимённых программ из pkgsrc они имели приоритет над имеющимися в базовой поставке, нужно настроить переменную PATH
.
Например, поменять значение переменной PATH для пользователя root можно через файл /root/.profile
, изменив в нём переменную PATH следующим образом:
export PATH=/usr/pkg/sbin:/usr/pkg/bin:/sbin:/usr/sbin:/bin:/usr/bin
export PATH=${PATH}:/usr/X11R7/bin:/usr/local/sbin:/usr/local/bin
Изменение пути к базе данных установленных пакетов
В новых сеансах пользователя root предпочтение будет отдаваться программам, установленным через pkgsrc, в том числе утилитам pkg_* из пакета pkg_install
.
Последнее особенно важно, т.к. начиная с 2021 года в pkgsrc используется новое положение базы данных установленных программ. Ранее это был каталог /var/db/pkgsrc
, теперь же это каталог /usr/pkg/pkgdb
. Новые утилиты используют второй путь. После изменения переменной PATH
содержимое старого каталога можно переместить в новый. Задать положение этого каталога явным образом можно через переменную PKG_DBDIR
в файле /etc/mk.conf
, например вот так:
PKG_DBDIR= /usr/pkg/pkgdb
Поиск пакетов
Поиск пакетов по названию или описанию можно осуществлять при помощи такой команды:
# cd /usr/pkgsrc
# make search key=dovecot
При первом запуске команда создаст индекс пакетов и их зависимостей, что может потребовать довольно много времени (на старых компьютерах - несколько часов).
Просмотр информации о пакете
Чтобы посмотреть доступные опции найденного пакета и опции, с которыми он будет собран по умолчанию, нужно перейти в его каталог и выполнить соответствующую команду:
# /usr/pkgsrc/
# make show-options
Чтобы посмотреть зависимости пакета, можно воспользоваться такой командой:
# make show-depends
Посмотреть список всех сборочных зависимостей можно при помощи команды:
# make print-build-depends-list
Посмотреть список всех зависимостей, требующихся для работы программы, можно при помощи команды:
# make print-run-depends-list
Стоит учитывать, что список зависимостей может меняться в зависимости от выбранных опций, с которыми пакет будет собираться. Поэтому имеет смысл сначала отметить необходимые опции и лишь затем смотреть зависимости.
Получить команды для скачивания необходимых зависимостей и исходников самого пакета можно при помощи такой команды:
# make fetch-list
Запустить скачивание можно следующим образом:
# make fetch-list | sh
Просмотр опций пакета и его зависимостей
Для рекурсивного просмотра опций пакетов я доработал файл /usr/pkgsrc/mk/bsd.pkg.readme.mk
и добавил два новых правила, сделав их на основе правил build-depends-list
и print-build-depends-list
. Выглядят новые правила следующим образом:
.PHONY: show-options-depends
.if !target(show-options-depends)
show-options-depends:
@${ECHO} "--- `${RECURSIVE_MAKE} ${MAKEFLAGS} package-name` ---"
@${RECURSIVE_MAKE} ${MAKEFLAGS} show-options
@${ECHO} ""
@${_DEPENDS_WALK_CMD} ${PKGPATH} | \
while read dir; do \
( cd ../../$$dir && \
${ECHO} "--- `${RECURSIVE_MAKE} ${MAKEFLAGS} package-name` ---" && \
${RECURSIVE_MAKE} ${MAKEFLAGS} show-options && \
${ECHO} "") \
done
.endif
.PHONY: show-options-recursive
.if !target(show-options-recursive)
show-options-recursive:
. if !empty(BUILD_DEPENDS) || !empty(DEPENDS)
@${RECURSIVE_MAKE} ${MAKEFLAGS} show-options-depends
. endif
.endif
Для рекурсивного просмотра опций пакета и его зависимостей после доработки файла /usr/pkgsrc/mk/bsd.pkg.readme.mk
можно воспользоваться такой командой:
# make show-options-recursive
Вывод команды будет иметь примерно следующий вид:
--- curl-7.76.0 ---
Any of the following general options may be selected:
gssapi Enable gssapi (Kerberos V) support.
http2 Add support for HTTP/2.
idn Internationalized Domain Names (IDN) support.
inet6 Enable support for IPv6.
ldap Enable LDAP support.
libssh2 Use libssh2 for SSHv2 protocol support.
rtmp Enable rtmp:// support using rtmpdump.
These options are enabled by default:
gssapi http2 idn inet6
These options are currently enabled:
You can select which build options to use by setting PKG_DEFAULT_OPTIONS
or PKG_OPTIONS.curl.
--- cwrappers-20180325 ---
This package does not use the options framework.
--- digest-20190127 ---
This package does not use the options framework.
--- m4-1.4.18nb2 ---
This package does not use the options framework.
--- libtool-base-2.4.6nb2 ---
This package does not use the options framework.
--- perl-5.32.1 ---
Any of the following general options may be selected:
debug Enable debugging facilities in the package.
dtrace Enable DTrace support.
mstats Enable memory statistics.
threads Enable threads support.
Exactly one of the following perlbits options is required:
64bitall
64bitauto
64bitint
64bitmore
64bitnone
These options are enabled by default:
64bitauto threads
These options are currently enabled:
64bitauto
You can select which build options to use by setting PKG_DEFAULT_OPTIONS
or PKG_OPTIONS.perl.
Скачивание исходных текстов
Скачать исходные тексты можно при помощи команды:
# make fetch
Скачанные архивы попадают в каталог /usr/pkgsrc/distfiles/
.
Проверка целостности исходных текстов
Для проверки целостности скачанных исходных текстов можно воспользоваться такой командой:
# make checksum
Наложение заплат
Для наложения заплат на исходные тексты можно воспользоваться этой командой:
# make patch
Команда может пригодиться для добавления собственных заплаток перед сборкой программы.
Распаковка исходных текстов
Распаковать их можно при помощи команды:
# make extract
Настройка опций сборки
Чтобы изменить опции, с которыми будет собираться тот или иной пакет, нужно прописать их в файле /etc/mk.conf
, вот так:
PKG_OPTIONS.dovecot= ssl kqueue -pam -tcpwrappers
Отключаемые опции указываются с минусом, включаемые указываются без минуса. Если файла /etc/mk.conf
ещё нет, то нужно создать его.
Сборка исходных текстов
Сборка пакета осуществляется при помощи следующей команды:
# make
Сборка пакета
Для сборки пакета можно воспользоваться такой командой:
# make package
Собранные пакеты помещаются в каталоге /usr/pkgsrc/packages/All/
.
Установка пакета
Установка пакета осуществляется при помощи такой команды:
# make install
Удаление сборочных файлов
После того, как пакет был собран и установлен, в системе pkgsrc остаются результаты сборки в каталогах work внутри каталога соответствующего пакета. Эти файлы во-первых занимают место на диске, а во-вторых могут привести к неожиданным результатам при попытке собрать пакеты с другими опциями.
Удалить эти файлы самого пакета можно командой:
# make clean
Для удаления таких файлов из всех пакетов, которые использовались при сборке этого, можно при помощи команды:
# make clean-depends
При использовании команды make удаление сборочных файлов пакетов-зависимостей происходит путём вызова команды make
в соответствующих каталогах, из-за чего процесс удаления файлов может занять довольно много времени. Чтобы ускорить удаление, можно воспользоваться одной из следующих команд:
# find /usr/pkgsrc -name work -exec rm -r {} +
# find /usr/pkgsrc -maxdepth 3 -mindepth 3 -name work -exec rm -r {} +
Вторая команда должна отработать быстрее, т.к. ищет каталог work
только внутри каталогов портов, не занимаясь поиском каталога work
в вышележащих и нижележащих каталогах.
Отслеживание уязвимостей
5.1.6. Checking for security vulnerabilities in installed packages
Скачивание свежей информации об уязвимостях в программном обеспечении:
# pkg_admin fetch-pkg-vulnerabilities
Проверка наличия уязвимостей в установленных пакетах:
# pkg_admin audit
Для автоматического периодического обновления информации об уязвимостях нужно вписать в /etc/daily.conf
:
fetch_pkg_vulnerabilities=YES
Для автоматической периодической проверки установленных пакетов на уязвимости нужно вписать в /etc/security.conf
:
check_pkg_vulnerabilities=YES
Для того, чтобы в скриптах из базовой системы использовались пути к утилитам, установленным из pkgsrc, нужно заменить пути к программам pkg_admin
и pkg_info
в файле /etc/pkgpath.conf
:
pkg_admin=/usr/pkg/sbin/pkg_admin
pkg_info=/usr/pkg/sbin/pkg_info
Решение проблем
Если при обновлении Perl возникает ошибка следующего вида:
pkg_add: Can't open +CONTENTS of depending package p5-Crypt-OpenSSL-Guess-0.11
То решить её можно при помощи следующей команды:
# pkg_admin rebuild-tree
Цели make
make clean
- удалить исходные файлы из рабочего каталога так, что можно будет начать сборку сначала с новыми опциями, заплатами и т.д.make fetch
- просто скачивает файлы и проверяет соответствие его хэш-суммы. Сообщает об ошибке, если хэш-сумма не существует.make distinfo
илиmake mdi
- обновляет описанные выше хэш-суммы файлов в файлеdistinfo
.make extract
- извлекает исходные тексты программы из её архива в каталогwork
.make patch
- применяет локальные заплаты из pkgsrc к исходным текстам.make configure
- запскает сценарий GNU configure.make
илиmake build
илиmake all
- остановиться после компиляции программы.make stage-install
- установка в целевой промежуточный каталогdestdir
для проверки, что список установленных файлов соответствует указанному вPLIST
, перед установкой в каталог prefix. Например, в случаеwget
, если у вас есть каталог по умолчаниюWRKOBJDIR
(будет объяснён ниже), файлы программы сначала будут установлены в<путь>/pkgsrc/net/wget/work/.destdir
, а затем, после нескольких проверок, в каталог установки, такой как/usr/pkg
.make test
- запускает тесты пакета, если они существуют.make package
- создаёт пакет без его установки, но при этом всё равно будут установлены зависимости.make replace
- модернизировать или переустановить пакет, если он уже установлен.make deinstall
- удалить программу.make install
- устанвоить из вышеупомянутого каталогаwork/.destdir
в каталогprefix
.make bin-install
- установить пакет локально, если он ранее уже был собран, или удалённо, как описано в переменнойBINPKG_SITES
в файлеmk.conf
. Вы можете установить зависимости из пакетов, если настроите переменнуюDEPENDS_TARGET= bin-install
в файлеmk.conf
.make show-depends
- показать зависимости порта.make show-options
- показать различные опции порта, описанные вoptions.mk
.make clean-depends
- очистить все зависимости порта.make distclean
- удалить архив с исходными текстами.make package-clean
- удалить пакет.make distinfo
илиmake mdi
- обновить файлdistinfo
, содержащий хэш-суммы файлов, если у вас новыйdistfile
или заплатка.make print-PLIST
- сгенерировать файлPLIST
из файлов, найденных в каталогеwork/.destdir
.