Это руководство по использованию pkg_comp 2.0 в NetBSD.
Цели: использовать pkg_comp 2.0 для сборки двоичного репозитория всех нужных пакетов; ежедневно обновлять этот репозиторий; и использовать этот репозиторий вместе с pkgin для поддержания свежести и безопасности системы NetBSD.
Это руководство расчитано на NetBSD, но с небольшими изменениями может сгодиться и для других платформ. По крайней мере ожидается, что руководство для MacOS появится сразу, как только я создам автономный установощик pkg_comp для этой платформы.
Сначала установим пакет sysutils/sysbuild-user и запустим полную компиляцию NetBSD, чтобы у pkg_comp были архивы для установки системы. Обратитесь к sysbuild(1) и pkg_info sysbuild-user за подробностями о том, как это сделать. Или можно скачать установочные архивы с сервера FTP и затем указать их расположение pkg_comp.
Теперь установим пакет pkgtools/pkg_comp-cron. Ниже в руководстве предполагается, что всё это было проделано.
Для периодической сборки с помощью pkg_comp нужно сделать несколько небольших правок в файлах конфигурации по умолчанию. Эти файлы находятся в каталоге /var/pkg_comp/, который является домашним каталогом для pkg_comp-cron:
/var/pkg_comp/pkg_comp.conf: Это файл конфигурации самого pkg_comp. Настройки, выставленные pkg_comp-cron по умолчанию, должны сгодиться.
Этот файл состоит из трёх главных разделов: объявление, как загружать pkgsrc, определение структуры файловой системы на сборочном компьютере и определение структуры файловой системы собранных пакетов.
Можно поменять целевые системные пути, такие как LOCALBASE или SYSCONFDIR, но менять системные пути на сборочном компьютере не стоит.
/var/pkg_comp/list.txt: Здесь определяется список пакетов, которые нужно периодически собирать в рамках задачи, запускаемой через cron. Сборка будет завершаться ошибкой, если не указать хотя бы один пакет.
ПРЕДУПРЕЖДЕНИЕ: Убедитесь, что включили в этот список пакеты pkg_comp-cron и pkgin, чтобы получившийся набор двоичных пакетов содержал эти важные инструменты управления пакетами. В противном случае придётся столкнуться с некоторыми неприятностями после повторного развёртывания системы.
И наконец, проверьте crontab пользователя root, чтобы убедиться в разумности настроек задачи, запускающей pkg_comp. Если компьютер медленный или если нужно собирать много пакетов, то возможно стоит понизить частоту сборки с ежедневной до еженедельной.
Ниже приведён пример конфигурации на моём компьютере NetBSD для разработки в том виде, в котором их выводи подкоманда config. Воспользуйтесь этим выводом, чтобы сверить его со своими ожиданиями. В последующем тексте этого руководства я буду использовать приведённые ниже значения:
# pkg_comp -c /var/pkg_comp/pkg_comp.conf config AUTO_PACKAGES = autoconf automake bash colordiff dash emacs-nox11 git-base git-docs gmake gnuls lua52 mozilla-rootcerts pdksh pkg_comp-cron pkg_developer pkgin sqlite3 sudo sysbuild sysbuild-user sysupgrade tmux vim zsh CVS_ROOT = :ext:anoncvs@anoncvs.NetBSD.org:/cvsroot CVS_TAG is undefined DISTDIR = /var/pkg_comp/distfiles EXTRA_MKCONF = /var/pkg_comp/extra.mk.conf FETCH_VCS = cvs GIT_BRANCH = trunk GIT_URL = https://github.com/jsonn/pkgsrc.git LOCALBASE = /usr/pkg NJOBS = 2 PACKAGES = /var/pkg_comp/packages PBULK_PACKAGES = /var/pkg_comp/pbulk-packages PKG_DBDIR = /usr/pkg/libdata/pkgdb PKGSRCDIR = /var/pkg_comp/pkgsrc SANDBOX_CONFFILE = /var/pkg_comp/sandbox.conf SYSCONFDIR = /etc UPDATE_SOURCES = true VARBASE = /var NETBSD_NATIVE_RELEASEDIR = /home/sysbuild/release/amd64 NETBSD_RELEASE_RELEASEDIR = /home/sysbuild/release/amd64 NETBSD_RELEASE_SETS is undefined SANDBOX_ROOT = /var/pkg_comp/sandbox SANDBOX_TYPE = netbsd-release
Теперь, когда всё полностью установлено и настроено, можно попробовать собрать что-нибудь вручную, чтобы убедиться, что всё работает, прежде чем запустится задача из cron.
Простейший способ с использованием полной автоматизации выглядит следующим образом:
# pkg_comp -c /var/pkg_comp/pkg_comp.conf auto
Эта простейшая с виду команда сделает следующее:
После успешного вызова в каталоге, который вы настроили в PACKAGES и которым при установке pkg_comp-cron по умолчанию является /var/pkg_comp/packages/, останется коллекция пакетов.
Если нужно ограничить набор пакетов при ручной сборке, укажите нужные пакеты после аргумента auto. Они заменят содержимое AUTO_PACKAGES, взятое из файла list.txt.
А как вместо auto запускать этапы раздельно? Указанная выше команда будет равнозначной следующим:
# pkg_comp -c /var/pkg_comp/pkg_comp.conf fetch # pkg_comp -c /var/pkg_comp/pkg_comp.conf sandbox-create # pkg_comp -c /var/pkg_comp/pkg_comp.conf bootstrap # pkg_comp -c /var/pkg_comp/pkg_comp.conf build <имена пакетов> # pkg_comp -c /var/pkg_comp/pkg_comp.conf sandbox-destroy
Попробуйте. Чтобы попасть в песочницу в диалоговом режиме, можно воспользоваться командой sandbox-shell. За подробностями обратитесь к pkg_comp(8).
Напоследок замечу, что пользователь root будет получать письма при ошибках выполнения периодической задачи pkg_comp из cron, но только при ошибках. Полные журналы всех сборок, успешных или неудачных, можно найти в каталоге /var/pkg_comp/log/.
Теперь, когда собран первый набор пакетов, можно попробовать установить их. В NetBSD, в конфигурации pkg_comp-cron по умолчанию, собранные пакеты предназначены для установки в каталог /usr/pkg, поэтому придётся сначала удалить уже установленные пакеты, чтобы избежать несоответствий в настройках с собранными пакетами.
ПРЕДУПРЕЖДЕНИЕ: Да, вам действительно придётся удалить ваши пакеты. В настоящее время pkg_comp не распознаёт утилиты управления пакетами из базовой системы NetBSD (то есть развёртывание pkgsrc происходит безусловно, включая bmake). Это означает, что вновь собранные пакеты не будут совместимыми с уже имеющимися. Во избежание каких-либо проблем нужно начинать с нуля.
Очистить систему можно следующим образом:
# ... убедитесь, что ваша входная оболочка находится в /bin! ... # pkg_delete -r -R "*" # mv /usr/pkg/etc /root/etc.old # Резервное копирование изменённых файлов. # rm -rf /usr/pkg /var/db/pkg*
Теперь повторно развенём pkgsrc и переустановим удалённые пакеты:
# cd / # tar xzvpf /var/pkg_comp/packages/bootstrap.tgz # echo "pkg_admin=/usr/pkg/sbin/pkg_admin" >>/etc/pkgpath.conf # echo "pkg_info=/usr/pkg/sbin/pkg_info" >>/etc/pkgpath.conf # export PATH=/usr/pkg/bin:/usr/pkg/sbin:${PATH} # export PKG_PATH=file:///var/pkg_comp/packages/All # pkg_add pkgin pkg_comp-cron <другие пакеты>
Наконец, перенастроим пакеты, настройки которых ранее были изменены. Воспользуемся резервной копией из /root/etc.old для обновления соответствующих файлов в /etc. Вряд ли изменений было много, поэтому всё должно быть просто.
ВАЖНО: Обратите внимание, что в последней команде из примера указаны pkgin и pkg_comp-cron. Нужно установить их первыми, чтобы можно было выполнить следующие шаги этого руководства.
Как уже было сказано, при установке пакета pkg_comp-cron в cron помещается задача для ежедневного запуска pkg_comp. Это означает, что репозиторий пакетов в /var/pkg_comp/packages/ будет постоянно обновляться и можно использовать его для быстрого обновления системы с минимальным перерывом в работе.
Предполагаю, что вы воспользуетесь pkgtools/pkgin (а почему нет?) и настроите локальный репозиторий:
# echo 'file:///var/pkg_comp/packages/All' >>/etc/pkgin/repositories.conf
Теперь для обновления системы нужно выполнить всего лишь две команды:
# pkgin update # pkgin upgrade
Приятного пользования!
Автор перевода на русский язык: Владимир Ступин