Каков рекомендуемый рабочий процесс и среда для работы на базе кода FreeBSD? - PullRequest
1 голос
/ 09 ноября 2019

Я хочу разработать новую функцию или изменить существующую программу дистрибутива FreeBSD, в частности пользовательское пространство¹. Для этого мне нужно внести изменения в базу кода FreeBSD, а затем скомпилировать и протестировать их. 2

Выполнение этого в дереве в /usr/src и установка результата в системе кажется плохой идеей,с учетом того, что он требует, чтобы ваша машина разработки работала на CURRENT, развивалась с правами суперпользователя и подключала вашу систему в случае ошибки. Я полагаю, что должен быть лучший способ и, возможно, стандартная настройка, которую используют разработчики FreeBSD .³

Каков рекомендуемый рабочий процесс для разработки базы кода FreeBSD?


¹, поэтому соображения, характерные дляразработка ядра не очень важна

² Я знаком с процессом отправки изменений после того, как разработал их

³ Я ранее прочитал оба руководства по разработке и глава руководства FreeBSD по созданию источника , но ни один из них не рекомендует какой-либо конкретный процесс.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2019

Я являюсь коммиттером src.

Я часто начинаю с самого низкого релиза, к которому я намерен портировать порт (например, RELENG_11_3.

Я бы тогда сделал (до или после внесения изменений)):

   make buildworld

затем разверните в каталоге тюрьмы:

   make DESTDIR=/usr/jails/test installworld

Этот каталог тюрьмы, как подсказал первый респондент, может использоваться с bhyve, но мне проще его настроитьтюрьма или даже просто использование chroot.

Мне нравится конфигурировать мои тюрьмы в /etc/rc.conf вместо /etc/jail.conf:

Пример содержимого /etc/rc.conf:

   jail_enable="YES"
   jail_list="test"

   jail_test_rootdir="/usr/jails/test"
   jail_test_hostname="test"
   jail_test_devfs_enable="YES"

Я могу привести более подробные примеры, например, когда у тюрьмы есть частный сетевой стек, например, вы можете использовать SSH, но я не понимаю, что сетевой стекЭто важно для вашего тестирования из опубликованного вопроса.

Вы можете увидеть работающую тюрьму с "jls", и вы можете войти в работающую тюрьму с "jexec test bash"

Внутри тюрьмы вы можетепротестируйте свои изменения.

При выполнении такого вида песочницы, тюрьмы работаютk до тех пор, пока / usr / src, который вы создали / установили в тюрьму, относится к выпуску, который:

  1. старше гостевой ОС или
  2. в той же STABLEпереход в качестве гостевой ОС или
  3. По крайней мере, совместимый с гостевой ОС в двоичной форме

Ситуации 1 и 2 довольно безопасны, в то время как ситуация 3 (например, запуск более новой версии). / usr / src чем гостевая ОС) может стать хитрым. Например, при попытке запустить / usr / src head (13.0-CURRENT) в гостевой ОС 12.0-RELEASE-pX, где KBI, KPI и API могут различаться в зависимости от ядра и пользовательского пространства (с джейлами каждый джайл работает под гостевым компьютером). Ядро операционной системы).

Если вы обнаружите, что вам нужно запускать новейшие исходники для старой гостевой ОС, тогда bhyve - определенно решение. Вы должны взять этот каталог jail и вместо запуска jail с этим корневым каталогом запустить экземпляр bhyve с каталогом jail в качестве корневого. Я не часто использую bhyve, поэтому не могу вспомнить, нужно ли вам сначала помещать содержимое в образ диска и сначала указывать bhyve на образ диска - другие и / или Google будут знать ответ на этот вопрос.

0 голосов
/ 10 ноября 2019

Я коммиттер портов, а не src, но AFAIK, использующий CURRENT, является распространенной практикой среди разработчиков.

Другой способ работы - это настроить CURRENT VM, поделиться ею через NFS, смонтировать изхост и установить в него, запустив make install DESTDIR=/mnt/current. Кстати, вы можете использовать BHyVe для виртуализации.

...