Hasher/vm-run: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 2: Строка 2:


Он работает по аналогии с [https://lwn.net/Articles/584620/ <tt>virtme</tt>], <tt>eudyptula-boot</tt>, <tt>vido</tt> и т.д. — бутится Linux ядро, где корень файловой системы (то есть содержимое hasher) предоставлен внутрь <tt>qemu</tt> по протоколу 9p, а init запускает вашу команду. Нужно учитывать, что хоть внутри виртуализации у вас будут рутовые привилегии, но снаружи будет обычный юзер builder. Если для тестов надо создавать файлы под рутом, то можно использовать tmpfs или создать ext4 образ в файле и примонтировать его куда требуется. Код возврата вашей команды вернется из <tt>vm-run</tt>.
Он работает по аналогии с [https://lwn.net/Articles/584620/ <tt>virtme</tt>], <tt>eudyptula-boot</tt>, <tt>vido</tt> и т.д. — бутится Linux ядро, где корень файловой системы (то есть содержимое hasher) предоставлен внутрь <tt>qemu</tt> по протоколу 9p, а init запускает вашу команду. Нужно учитывать, что хоть внутри виртуализации у вас будут рутовые привилегии, но снаружи будет обычный юзер builder. Если для тестов надо создавать файлы под рутом, то можно использовать tmpfs или создать ext4 образ в файле и примонтировать его куда требуется. Код возврата вашей команды вернется из <tt>vm-run</tt>.
Справка по возможностям: <tt>vm-run --help</tt>.


Пример, что добавить в spec для обычного user space пакета (не ядра и не модуля ядра) для запуска <tt>make check</tt> под рутом:
Пример, что добавить в spec для обычного user space пакета (не ядра и не модуля ядра) для запуска <tt>make check</tt> под рутом:
Строка 17: Строка 19:
   vm-run "''команды запуска тестов...''"
   vm-run "''команды запуска тестов...''"


Справка по остальным возможностям: <tt>vm-run --help</tt>.
Если тяжелые тесты имеет смысл запускать только в KVM и не запускать под эмуляцией, то рекоменудется сделать такую проверку:
  %check
  if [ -w /dev/kvm ]; then
    vm-run make check
  fi


=== Включение kvm ===
=== Включение kvm ===

Версия от 23:12, 3 апреля 2021

Иногда для запуска тестов в секции %check требуются рутовые привилегии, чтоб обойти это ограничение есть пакет rpm-build-vm (анонс), который позволяет запустить произвольную команду под qemu с псевдо-рутовыми привилегиями.

Он работает по аналогии с virtme, eudyptula-boot, vido и т.д. — бутится Linux ядро, где корень файловой системы (то есть содержимое hasher) предоставлен внутрь qemu по протоколу 9p, а init запускает вашу команду. Нужно учитывать, что хоть внутри виртуализации у вас будут рутовые привилегии, но снаружи будет обычный юзер builder. Если для тестов надо создавать файлы под рутом, то можно использовать tmpfs или создать ext4 образ в файле и примонтировать его куда требуется. Код возврата вашей команды вернется из vm-run.

Справка по возможностям: vm-run --help.

Пример, что добавить в spec для обычного user space пакета (не ядра и не модуля ядра) для запуска make check под рутом:

 BuildRequires: rpm-build-vm
 ...
 %check
 vm-run make check

Установка rpm-build-vm автоматически доставляет ядро kernel-image-un-def в hasher, что будет излишне при сборке ядра или ядерного модуля, поэтому есть пакет rpm-build-vm-run, который не имеет зависимостей к ядру. Пример использования для ядра или модуля:

 BuildRequires: rpm-build-vm-run
 ...
 %check
 vm-run "команды запуска тестов..."

Если тяжелые тесты имеет смысл запускать только в KVM и не запускать под эмуляцией, то рекоменудется сделать такую проверку:

 %check
 if [ -w /dev/kvm ]; then
   vm-run make check
 fi

Включение kvm

Для ускорения работы тестов полезно настроить kvm в hasher. См. Hasher/FAQ: Как запустить в хэшере qemu с поддержкой kvm. Поддержка kvm есть на всех основых архитектурах, кроме armh.