Эльбрус/rtc: различия между версиями
м (упс, сломал вёрстку. Починил) |
м (мелкая вычитка свежих правок; перенос раздела "создание окружений" туда, где он и должен был оказаться сразу (ой)) |
||
Строка 4: | Строка 4: | ||
Для решения проблемы совместимости с унаследованным ПО для платформы x86 в МЦСТ разработали бинарный транслятор, работающий в двух режимах, чем-то напоминающих гипервизор (когда можно установить и запустить целую ОС) и нечто, имеющее черты [[wine]] и chroot (когда требуется запустить отдельное приложение)<ref>кстати, сам wine под rtc тоже работает</ref>. | Для решения проблемы совместимости с унаследованным ПО для платформы x86 в МЦСТ разработали бинарный транслятор, работающий в двух режимах, чем-то напоминающих гипервизор (когда можно установить и запустить целую ОС) и нечто, имеющее черты [[wine]] и chroot (когда требуется запустить отдельное приложение)<ref>кстати, сам wine под rtc тоже работает</ref>. | ||
Первый режим реализован в lintel | Первый режим реализован в <tt>lintel</tt><ref>в старых версиях требовал для своей установки и хранения внутренних данных -- кэша откомпилированного кода -- установленную CF-карточку; в более новых версиях мог устанавливаться на отдельный SATA-диск; в современных версиях может устанавливаться на тот же диск, что и гостевая ОС, в последние 16-64 гигабайт, если их оставить неразмеченными</ref>; второй -- в {{pkg|rtc}} и работает под управлением уже запущенной операционной системы. | ||
В этой статье мы рассмотрим второй вариант. | В этой статье мы рассмотрим второй вариант. | ||
Здесь: | Здесь: | ||
; хост (хостовая операционная система) | |||
: -- ОС, под которой мы запускаем транслятор, в которую кладём образ гостевой системы и т.п. Имеет архитектуру e2k, в файловой системе лежат бинарники под e2k. | |||
; гость (гостевой образ, гостевой chroot) | |||
: -- операционное окружение, файловую систему которого (в виде подкаталога в файловой системе хоста) мы подсовываем транслятору, и в которую {{pkg|rtc}} делает chroot при запуске. Имеет архитектуру x86 или x86_64, в файловой системе лежат бинарники такой же архитектуры. Ядро не требуется. | |||
Всё то, что мы запускаем из-под транслятора, должно лежать внутри гостевого образа (из-под транслятора, как и из-под chroot-а, получить доступ без дополнительных усилий к файловой системе хоста в общем случае нельзя). | Всё то, что мы запускаем из-под транслятора, должно лежать внутри гостевого образа (из-под транслятора, как и из-под chroot-а, получить доступ без дополнительных усилий к файловой системе хоста в общем случае нельзя). | ||
Строка 28: | Строка 30: | ||
При успешном запуске под бинарной трансляцией отданная в полученном приглашении команда {{cmd|arch}} сообщит не "e2k", а "x86_64". | При успешном запуске под бинарной трансляцией отданная в полученном приглашении команда {{cmd|arch}} сообщит не "e2k", а "x86_64". | ||
Разумеется, путь | Разумеется, путь {{path|/opt/x86}} не фиксирован, ничто не мешает иметь на машине множество гостевых образов в разных каталогах. | ||
Вместо {{cmd|/bin/bash}} можно подставить любую другую команду, которую нужно будет запустить под бинарным транслятором. Путь к бинарнику необходимо указывать полный относительно места расположения образа. Например, если образ расположен в | Вместо {{cmd|/bin/bash}} можно подставить любую другую команду, которую нужно будет запустить под бинарным транслятором. Путь к бинарнику необходимо указывать полный относительно места расположения образа. Например, если образ расположен в {{path|/opt/x86}}, и мы хотим запустить {{cmd|/opt/x86/usr/bin/mc}}, то нужно давать команду типа: | ||
/usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -- /usr/bin/mc | /usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -- /usr/bin/mc | ||
Строка 36: | Строка 38: | ||
На машинах на базе процессоров "Эльбрус-4С" следует запускать {{cmd|/opt/mcst/rtc/rtc_opt_rel_e2s_ob}}<ref>здесь "e2s" -- внутреннее обозначение процессора "Эльбрус-4С";<br/>"p1" -- одно из внутренних обозначений процессора "Эльбрус-8С";<br />"x64" -- синоним x86_64/amd64 (то бишь 64-битная x86-совместимая архитектура)</ref> или {{cmd|/opt/mcst/rtc/rtc_opt_rel_e2s_x64_ob}} в зависимости от разрядности образа. | На машинах на базе процессоров "Эльбрус-4С" следует запускать {{cmd|/opt/mcst/rtc/rtc_opt_rel_e2s_ob}}<ref>здесь "e2s" -- внутреннее обозначение процессора "Эльбрус-4С";<br/>"p1" -- одно из внутренних обозначений процессора "Эльбрус-8С";<br />"x64" -- синоним x86_64/amd64 (то бишь 64-битная x86-совместимая архитектура)</ref> или {{cmd|/opt/mcst/rtc/rtc_opt_rel_e2s_x64_ob}} в зависимости от разрядности образа. | ||
Иногда требуется необходимость прокинуть какой-нибудь каталог внутрь chroot-а гостевого образа. Например, рассмотрим это на примере прокидывания каталога | Иногда требуется необходимость прокинуть какой-нибудь каталог внутрь chroot-а гостевого образа. Например, рассмотрим это на примере прокидывания каталога {{path|/run/pulse}} (это применяется для того, чтобы в гостевых приложениях работало PulseAudio) внутрь образа {{path|/opt/x86}}. Нужно: | ||
* Создать пустой каталог | * Создать пустой каталог {{path|/opt/x86/run/pulse}} (если его ещё нет); | ||
* Запустить бинарный транслятор с параметром <tt>-b <имя каталога для прокидывания></tt>, например: | * Запустить бинарный транслятор с параметром <tt>-b <имя каталога для прокидывания></tt>, например: | ||
/usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -b /run/pulse -- /bin/bash | /usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -b /run/pulse -- /bin/bash | ||
После запуска транслятора каталог | После запуска транслятора каталог {{path|/run/pulse}} внутри гостевого chroot-а будет отражать содержимое {{path|/run/pulse}} на хостовой системе. | ||
== Запуск графических приложений и приложений, работающих с оборудованием == | == Запуск графических приложений и приложений, работающих с оборудованием == | ||
Строка 49: | Строка 51: | ||
Для доступа к <tt>$DISPLAY</tt> может потребоваться либо предварительно отключить авторизацию командой {{cmd|xhost localhost}} или {{cmd|xhost +}}, либо обеспечить наличие у пользователя в домашнем каталоге под <tt>path_prefix</tt> такого же {{path|~/.Xauthority}}, как на основной системе. | Для доступа к <tt>$DISPLAY</tt> может потребоваться либо предварительно отключить авторизацию командой {{cmd|xhost localhost}} или {{cmd|xhost +}}, либо обеспечить наличие у пользователя в домашнем каталоге под <tt>path_prefix</tt> такого же {{path|~/.Xauthority}}, как на основной системе. | ||
Работа с RAID-контроллерами megaraid (например, с помощью утилиты | Работа с [[эльбрус/hcl/hba|RAID-контроллерами]] megaraid (например, с помощью утилиты {{cmd|storcli}}) поддерживается в {{pkg|rtc 3.1}} или более новой версии. | ||
Работа с OpenGL поддерживается в {{pkg|rtc 3.1}} или более новой версии. | Работа с [[эльбрус/hcl/gpu|OpenGL]] поддерживается в {{pkg|rtc 3.1}} или более новой версии. | ||
Работа с OpenCL должна поддерживаться в {{pkg|rtc 3.4}} или более новой версии. | Работа с OpenCL должна поддерживаться в {{pkg|rtc 3.4}} или более новой версии. | ||
Строка 57: | Строка 59: | ||
Работа с ALSA поддерживается в {{pkg|rtc 3.3}} или более новой версии. | Работа с ALSA поддерживается в {{pkg|rtc 3.3}} или более новой версии. | ||
Работа с | Работа с PulseAudio поддерживается в {{pkg|rtc 3.1}} или более новой версии, при этом нужно пробросить в гостевой chroot каталог {{path|/run/pulse}}. | ||
Можно запускать Windows-приложения с помощью wine и {{pkg|rtc 3.1}} или более нового. Следует иметь в виду, что 32-битные приложения можно запускать только 32-битным wine из-под 32-битного гостевого образа и 32-битного rtc, работающего с ним, а 64-битные - соответственно 64-битным wine из-под 64-битного образа и 64-битного rtc. К сожалению, многие 64-битные программы имеют 32-битные инсталляторы, что делает их установку под wine64 нереальной без специальных усилий. | Можно запускать Windows-приложения с помощью {{pkg|wine}} и {{pkg|rtc 3.1}} или более нового. Следует иметь в виду, что 32-битные приложения можно запускать только 32-битным {{pkg|wine}} из-под 32-битного гостевого образа и 32-битного {{pkg|rtc}}, работающего с ним, а 64-битные - соответственно 64-битным {{pkg|wine}} из-под 64-битного образа и 64-битного {{pkg|rtc}}. К сожалению, многие 64-битные программы имеют 32-битные инсталляторы, что делает их установку под wine64 нереальной без специальных усилий. | ||
== Создание окружений == | == Создание окружений == | ||
Можно установить любой линукс в нужный вид в любой виртуальной машине и сделать архив файловой системы (изнутри VM или экспортировав образ диска, подключив и сделав архив снаружи). | Можно установить любой линукс в нужный вид в любой виртуальной машине и сделать архив файловой системы (изнутри VM при помощи [[rescue]] или экспортировав образ диска, подключив и сделав архив снаружи). | ||
На альте можно задействовать предварительно настроенный [[hasher]]: | На альте можно задействовать предварительно настроенный [[hasher]]: | ||
Строка 79: | Строка 76: | ||
Заархивировать полученное содержимое можно так: | Заархивировать полученное содержимое можно так: | ||
hsh-run --rooter -- tar --numeric-owner --exclude .in --exclude .out --exclude .host --exclude /dev/log -cf - / > ''имя-архива''.tar | hsh-run --rooter -- tar --numeric-owner --exclude .in --exclude .out --exclude .host --exclude /dev/log -cf - / > ''имя-архива''.tar | ||
= Ссылки = | |||
* [http://www.mcst.ru/tag/50c89dcf64871a2115000000 МЦСТ > Тэги > Двоичный транслятор] | |||
* [http://www.mcst.ru/files/5a9eb8/a30cd8/50681b/000000/rodzevich_s._a._apparatnaya_podderzhka_dvoichnoy_translyatsii_x86_veshchestvennoy_arifmetiki.pdf Аппаратная поддержка двоичной трансляции x86 вещественной арифметики в процессорах "Эльбрус"] (PDF) | |||
* [http://elbrus2k.wikidot.com/dynamic-binary-translation Dynamic binary translation] | |||
= Примечания = | = Примечания = |
Версия от 14:49, 14 ноября 2019
Бинарный транслятор
Для решения проблемы совместимости с унаследованным ПО для платформы x86 в МЦСТ разработали бинарный транслятор, работающий в двух режимах, чем-то напоминающих гипервизор (когда можно установить и запустить целую ОС) и нечто, имеющее черты wine и chroot (когда требуется запустить отдельное приложение)[1].
Первый режим реализован в lintel[2]; второй -- в rtc и работает под управлением уже запущенной операционной системы.
В этой статье мы рассмотрим второй вариант.
Здесь:
- хост (хостовая операционная система)
- -- ОС, под которой мы запускаем транслятор, в которую кладём образ гостевой системы и т.п. Имеет архитектуру e2k, в файловой системе лежат бинарники под e2k.
- гость (гостевой образ, гостевой chroot)
- -- операционное окружение, файловую систему которого (в виде подкаталога в файловой системе хоста) мы подсовываем транслятору, и в которую rtc делает chroot при запуске. Имеет архитектуру x86 или x86_64, в файловой системе лежат бинарники такой же архитектуры. Ядро не требуется.
Всё то, что мы запускаем из-под транслятора, должно лежать внутри гостевого образа (из-под транслятора, как и из-под chroot-а, получить доступ без дополнительных усилий к файловой системе хоста в общем случае нельзя).
Применение
Требуется установленный пакет rtc.
При наличии, например, в /opt/x86/ развёрнутого окружения для x86_64[3] можно запустить (на машинах на базе процессоров "Эльбрус-1С+" или "Эльбрус-8С") командную оболочку такой командой:
/usr/bin/rtc_opt_rel_p1_x64_ob --path_prefix /opt/x86 -- /bin/bash
То же самое, но для окружения i386 (x86, i686, ia32):
/usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -- /bin/bash
При успешном запуске под бинарной трансляцией отданная в полученном приглашении команда arch сообщит не "e2k", а "x86_64".
Разумеется, путь /opt/x86 не фиксирован, ничто не мешает иметь на машине множество гостевых образов в разных каталогах.
Вместо /bin/bash можно подставить любую другую команду, которую нужно будет запустить под бинарным транслятором. Путь к бинарнику необходимо указывать полный относительно места расположения образа. Например, если образ расположен в /opt/x86, и мы хотим запустить /opt/x86/usr/bin/mc, то нужно давать команду типа:
/usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -- /usr/bin/mc
На машинах на базе процессоров "Эльбрус-4С" следует запускать /opt/mcst/rtc/rtc_opt_rel_e2s_ob[4] или /opt/mcst/rtc/rtc_opt_rel_e2s_x64_ob в зависимости от разрядности образа.
Иногда требуется необходимость прокинуть какой-нибудь каталог внутрь chroot-а гостевого образа. Например, рассмотрим это на примере прокидывания каталога /run/pulse (это применяется для того, чтобы в гостевых приложениях работало PulseAudio) внутрь образа /opt/x86. Нужно:
- Создать пустой каталог /opt/x86/run/pulse (если его ещё нет);
- Запустить бинарный транслятор с параметром -b <имя каталога для прокидывания>, например:
/usr/bin/rtc_opt_rel_p1_ob --path_prefix /opt/x86 -b /run/pulse -- /bin/bash
После запуска транслятора каталог /run/pulse внутри гостевого chroot-а будет отражать содержимое /run/pulse на хостовой системе.
Запуск графических приложений и приложений, работающих с оборудованием
Для доступа к $DISPLAY может потребоваться либо предварительно отключить авторизацию командой xhost localhost или xhost +, либо обеспечить наличие у пользователя в домашнем каталоге под path_prefix такого же ~/.Xauthority, как на основной системе.
Работа с RAID-контроллерами megaraid (например, с помощью утилиты storcli) поддерживается в rtc 3.1 или более новой версии.
Работа с OpenGL поддерживается в rtc 3.1 или более новой версии.
Работа с OpenCL должна поддерживаться в rtc 3.4 или более новой версии.
Работа с ALSA поддерживается в rtc 3.3 или более новой версии.
Работа с PulseAudio поддерживается в rtc 3.1 или более новой версии, при этом нужно пробросить в гостевой chroot каталог /run/pulse.
Можно запускать Windows-приложения с помощью wine и rtc 3.1 или более нового. Следует иметь в виду, что 32-битные приложения можно запускать только 32-битным wine из-под 32-битного гостевого образа и 32-битного rtc, работающего с ним, а 64-битные - соответственно 64-битным wine из-под 64-битного образа и 64-битного rtc. К сожалению, многие 64-битные программы имеют 32-битные инсталляторы, что делает их установку под wine64 нереальной без специальных усилий.
Создание окружений
Можно установить любой линукс в нужный вид в любой виртуальной машине и сделать архив файловой системы (изнутри VM при помощи rescue или экспортировав образ диска, подключив и сделав архив снаружи).
На альте можно задействовать предварительно настроенный hasher:
hsh --init hsh-install нужное возможно-также-нужное
где в возможно-также-нужное в случае графических приложений обычно попадают xauth и шрифты (например, fonts-otf-mozilla-fira); проверить функционирование приложения "не отходя от кассы" на той же машине, где собран чрут, можно так:
hsh-run -Y команда
Заархивировать полученное содержимое можно так:
hsh-run --rooter -- tar --numeric-owner --exclude .in --exclude .out --exclude .host --exclude /dev/log -cf - / > имя-архива.tar
Ссылки
- МЦСТ > Тэги > Двоичный транслятор
- Аппаратная поддержка двоичной трансляции x86 вещественной арифметики в процессорах "Эльбрус" (PDF)
- Dynamic binary translation
Примечания
- ↑ кстати, сам wine под rtc тоже работает
- ↑ в старых версиях требовал для своей установки и хранения внутренних данных -- кэша откомпилированного кода -- установленную CF-карточку; в более новых версиях мог устанавливаться на отдельный SATA-диск; в современных версиях может устанавливаться на тот же диск, что и гостевая ОС, в последние 16-64 гигабайт, если их оставить неразмеченными
- ↑ например, распакованного командой rm -rf /opt/x86; mkdir /opt/x86; tar -C /opt/x86 -xf имя-архива.tar
- ↑ здесь "e2s" -- внутреннее обозначение процессора "Эльбрус-4С";
"p1" -- одно из внутренних обозначений процессора "Эльбрус-8С";
"x64" -- синоним x86_64/amd64 (то бишь 64-битная x86-совместимая архитектура)