Сборка пакетов pkgsrc/NetBSD под SPARC32 и не только…

Из-за того, что кросскомпиляция некоторых инструментов в pkgsrc не возможна или очень трудна, а производительность реального железа на архитектуре SPARC32 не подходит для сборки, приходится использовать в общем единственный вариант — qemu-system-sparc.



Всё дальнейшее описание будет проходить в Windows в качестве хостовой ОС просто от того, что у меня в данный момент были достаточные ресурсы только под Windows, но в принципе, под Linux будет только синтаксис путей отличаться, да настройка сети.

QEMU я брал тут (версия 4.2.0), распаковал и ничего не настраивал. Распаковал по пути d:\qemu-4.2.0-win64.

Далее, нужно создать виртуальную машину и начать с создания диска. Я создал папку d:\sparc и памятуя об опытах кросскомпиляции создал виртуальный диск объёмом 500GB командой qemu-img.exe create -f qcow2 d:\SPARC\disc.qcow2 500G, выполненной из директории d:\qemu-4.2.0-win64.

Следующий шаг — собственно запуск машины, но т.к. мы будем компилировать (под SPARC32), мы считаем что в хост у нас ничего не упрётся и мы желаем максимум скорости, надо запустить такую машину, которая этот максимум скорости обеспечит. Так же, в силу того что много контента придётся брать из сети, машине нужна сеть. Начнем с сети — качаем файл TAP Driver’а тут (последний на момент написания текста), для простоты, после установки драйвера переименовываем виртуальное устройство в TAP и бриджуем его с реальной сетевушкой, которая получает адреса по DHCP. В принципе, настроить сеть не сложно, можно сделать это иначе — руководств много, но у меня сходу получилось так.

Если вдруг перед вашей машиной цепочка коммутаторов и бридж почему-то не поднимается, а коммутатор банит порт — дело может быть в STP. Решить проблему можно так:

Т.е. для Win10/2016 в реестре по адресу HKLM\SYSTEM\CurrentControlSet\Services\MsBridge добавить DWORD параметр DisableSTA со значением 1. Для Windows 7/8 сервис будет назыываться HKLM\SYSTEM\CurrentControlSet\Services\BridgeMP. Потребуется пересоздание моста и возможно перезапуск хоста.

Следующий момент — таки производительность. QEMU получает многие характеристики виртуальной машины параметрами к исполняемому файлу qemu-system-sparc.exe, и нужно задать такие параметры, чтобы процессоров и памяти было много и это всё работало, чтобы была сеть, был жесткий диск и оптический привод для установки ОС.

Соответственно, получается такая вот длинная команда, которую мы попытаемся сейчас разобрать:

qemu-system-sparc.exe -m 512 -M SS-20 -smp 4 -cpu "TI SuperSparc 60" -drive file=d:\SPARC\disc.qcow2,if=scsi,bus=0,media=disk -drive file=d:\SPARC\NetBSD-8.1-sparc.iso,if=scsi,bus=0,unit=2,media=cdrom,readonly=on -boot d -net nic -net tap,ifname=TAP --accel tcg,thread=multi

А теперь по порядку:

  • -m 512 -M SS-20 -smp 4 -cpu "TI SuperSparc 60"

    задаёт 512MB оперативной памяти, тип машины SparcStation 20, 4 процессора типа «TI SuperSparc 60»

  • -drive file=d:\SPARC\disc.qcow2,if=scsi,bus=0,media=disk

    собственно SCSI диск на шине 0 (с ид 0) по пути d:\SPARC\disc.qcow2

  • -drive file=d:\SPARC\NetBSD-8.1-sparc.iso,if=scsi,bus=0,unit=2,media=cdrom,readonly=on

    виртуальный SCSI CDROM, в котором лежит образ NetBSD для установки. Образ естественно нужно скачать и положить по указанному пути.

  • -boot d

    эта штука обеспечивает загрузку с CDROM. После установки ОС части 3 и 4 из команды можно убрать.

  • -net nic -net tap,ifname=TAP

    собственно сеть.

  • --accel tcg,thread=multi

    сильная магия, которая позволяет QEMU использовать более одного треда на хостовой системе. Обратите внимание что перед accel должно быть два тире.

После всего этого можно штатно установить NetBSD. Размер файла виртуального диска будет увеличиваться по мере заполнения. Всё работает и выглядит как-то так, надо только убедиться в том, что загружено ядро GENERIC.MP:

Во время сборки система нормально утилизирует всю оперативную память, вытесняя буфер/кеш, и утилизирует больше чем один тред. Но есть ли реальная многопоточность во время сборки мне судить трудно.

Далее всё опять тривиально — по мануалу. Идем на сайт, качаем архив pkgsrc, извлекаем его в usr, переходим в /usr/pkgsrc и сначала решаем свои мелкие тактические задачи, а потом делаем make package.

А теперь чуть более подробно:

  • На момент написания текста под SPARC32 видимо лучше использовать архив от 2019Q3. Это связано с тем, что в 2019Q4 в зависимостях есть openssl 1.1.1, который не собирается.
  • После извлечения архива, можно решить свои мелкие насущные задачки, дав команду make package в /usr/pkgsrc/sysutils/mc, /usr/pkgsrc/sysutils/htop, /usr/pkgsrc/editor/pico и некоторых других. Пакет при этом устанавливается командой pkg_add /usr/pkgsrc/packages/All/имяпакета. Так же окажется, что для сборки и установки pico, p7zip и еще много чего, потребуется принять некоторые лицензии.
  • Во время сборки первых пакетов по зависимостям соберутся openssl, perl, python и сборочные инструменты. Это долго, дальше, с удовлетворёнными зависимостями будет быстрее.
  • После того, как сборочная система более или менее настроена и работает так, как ожидается, можно сделать make package в /usr/pkgsrc/ и… ждать результата примерно неделю, а может и две.
  • Таким макаром много чего не соберется, т.к. сборку никто не проверял. Нет, ну серьезно… Tier II же. Тем не менее, соберется гораздо больше пакетов, чем наличиствует в бинарных репозиториях NetBSD.

К слову о бинарных репозиториях — SPARC, около 13 тысяч файликов, в то время как AMD64, более 20 тысяч файликов. Нет, я понимаю что они там firefox-esr не собрали под SPARC32, но htop и mc то чего?

При этом, конечно хорошо, что есть возможность сделать так:

export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/sparc/8.1/All/"
pkg_add -v pico
pkg_add -v p7zip
pkg_add -v bash
unset PKG_PATH

P.S. А еще, у меня есть живая машина на SPARC64, ALPHA, HPPA, ITANIUM и много этих ваших пентиумов… пособираем полгодика, устроим сквозной тест производительности 🙂


UPD
Многотредовость не показала фактического прироста скорости компиляции, но порой вызывала крах виртуальной машины, поэтому, конфигурация (команда для запуска) машины приобрела такой вид:

qemu-system-sparc.exe -m 512 -M SS-20 -cpu "TI SuperSparc 60" -drive file=d:\SPARC\disc.qcow2,if=scsi,bus=0,media=disk -drive file=d:\SPARC\NetBSD-8.1-sparc.iso,if=scsi,bus=0,unit=2,media=cdrom,readonly=on -boot d -net nic -net tap,ifname=TAP

А теперь по порядку:

  • -m 512 -M SS-20 -cpu "TI SuperSparc 60"

    задаёт 512 MB оперативной памяти, тип машины SparcStation 20, 1 процессор типа «TI SuperSparc 60»

  • -drive file=d:\SPARC\disc.qcow2,if=scsi,bus=0,media=disk

    собственно SCSI диск на шине 0 (с ид 0) по пути d:\SPARC\disc.qcow2

  • -drive file=d:\SPARC\NetBSD-8.1-sparc.iso,if=scsi,bus=0,unit=2,media=cdrom,readonly=on

    виртуальный SCSI CDROM, в котором лежит образ NetBSD для установки. Образ естественно нужно скачать и положить по указанному пути.

  • -boot d

    эта штука обеспечивает загрузку с CDROM. После установки ОС части 3 и 4 из команды можно убрать.

  • -net nic -net tap,ifname=TAP

    собственно сеть.

Запись опубликована в рубрике Программки с метками , , , , . Добавьте в закладки постоянную ссылку.

Один ответ на “Сборка пакетов pkgsrc/NetBSD под SPARC32 и не только…

  1. Уведомление: Кросс-компиляция pkgsrc в NetBSD | ideafix.name

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *