Глава 9. Эмуляция Linux

Глава 9. Эмуляция Linux

Русский перевод: Михаил Сгибнев

В реализации NetBSD для процессоров alpha, mac68k, macppc и некоторых других, число которых постоянно увеличивается, вожможно выполнение бинарных файлов Linux с помощью эмулятора Linux. Осуществляется это с помощью режима эмуляции Linux. Обычно режим эмуляции связывают с чем-то большим, медленным и неэффективным. Это связано с необходимостью эмулировать команды процессора. В нашем же случае ситуация кардинально отличается - необходимо эмулировать только системные вызовы, которые и так весьма похожи друг на друга. Вследствие этого работа эмулятора практически не заметна и скорость работы приложения такова, что неотличима от работы родного приложения NetBSD.

В данной главе мы рассмотрим работу эмулятора Linux на примере приложения Acrobat Reader version 4.

9.1. Установка поддержки эмуляции

Установка эмулятора подробно расписана в странице руководства compat_linux(8). При установке из системы пакетов необходимо выполнить только три шага:

  1. Конфигурирование ядра.

  2. Установка библиотек Linux.

  3. Установка приложения Linux, такого как Acrobat Reader

9.1.1. Конфигурирование ядра

При использовании ядра GENERIC ничего делать не надо, так как совместимость с Linux уже установлена.

В случае использования собственного ядра, проверьте, что в нем имеются следующие строки:

option COMPAT_LINUX
option EXEC_ELF32

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

9.1.2. Установка библиотек Linux

Получить необходимые библиотеки можно из любого дистрибутива Linux, если только они не слишком старые, но поскольку мы используем для установки систему портов, то установлены будут библиотеки Suse. В процессе установки произойдут следующие события:

  • Будет создана вторая корневая директория, необходимая для запуска Linux-программ, находящаяся в /emul/linux/. Linux-программы в режиме эмуляции требуют, чтобы этот каталог был установлен для них в качестве корневого и используют файлы из него. Если требуемый файл не найден, то буден произведен поиск в /, как в корневой директории.

    Для примера, если приложение Linux открывает файл /etc/ld.so.conf, то сперва он ищется в каталоге /emul/linux/etc/ld.so.conf и если не будет там найден, то ищется в /etc/ld.so.conf.

  • Будут установлены библиотеки Linux. Так как большинство приложений слинковано динамически, то наличие библиотек просто необходимо. Например, в случае Acrobat Reader, если перейти в каталог /usr/pkgsrc/print/acroread и выполнить команду make depends, то мы получим следующее сообщение:

    ===> acroread-4.0 requires Linux glibc2 libraries - see compat_linux(8).

В идеальном случае оба пункта будут выполнены программой установки без необходимости ручного вмешательства. (я предполагаю, что к этому времени Вы уже начали любить систему портов ...) В следующем разделе мы рассмотрим ручную установку библиотек Linux.

Для установки библиотек используется RPM-формат. Вследствие чего, нам необходимо выполнить make и make install в каталоге /usr/pkgsrc/misc/rpm/ для компиляции и установки утилиты rpm.

Затем установим пакет suse_base. Файлы Suse RPM должны быть скачаны с помощью системы портов или с Suse CD и положены в каталог /usr/pkgsrc/distfiles/suse. Для установки необходимо из каталога /usr/pkgsrc/emulators/suse_base выполнить команды make и make install.

Аналогично устанавливаем suse_compat, suse_libc5 and suse_x11. В итоге имеем:

# pkg_info -a | grep suse
suse_base-7.3nb5 Linux compatibility package
suse_x11-7.3nb2  Linux compatibility package for X11 binaries
suse_compat-7.3  Linux compatibility package with old shared libraries 

9.1.3. Установка Acrobat Reader

Теперь все готово для установки Acrobat Reader (или любой другой Linux программы). Переходим в каталог /usr/pkgsrc/print/acroread и выполняем:

# make
# make install

Замечание

при установке Acrobat Reader необходимо добавить строку «ACCEPTABLE_LICENSES+=adobe-acrobat-license» в файл /etc/mk.conf чтобы принять лицензию и выполнить команду make.

9.2. Структура каталогов

Если мы исследуем процесс установки эмуляции Linux, то обнаружим, что /emul/linux - символическая ссылка на каталог /usr/pkg/emul/linux, где была развернута следующая структура:

bin/
boot/
cdrom/
dev/
etc/
floppy/
home/
lib/
mnt/
opt/
proc/
root/
sbin/
usr/

Замечание

Всегда обращайтесь к /emul/linux, а не к /usr/pkg/emul/linux, так как этот кактлог может быть изменен в будущем.

Как много свободного места требуется для эмулятора? На своей системе я получил следующее значение:

# cd /usr/pkg/emul
# du -k linux
...
214049 linux/

Сама же программа Acrobat Reader была установлена в традиционном для бинарных файлов каталоге /usr/pkg/bin.

$ acroread netbsd.pdf 

9.3. Эмуляция /proc

Некоторые Linux программы используют в своей работе Linux-like файловую систему /proc. Файловая система /proc, используемая в NetBSD может эмулировать /proc, которая содержит специфические для Linux псевдофайлы. Этого можно достичь с помощью опции «linux»:

# mount_procfs -o linux procfs /emul/linux/proc
 

В этом примере файловая система proc была смонтирована в каталог /emul/linux/proc. Вы также можете указать NetBSD монтировать ее автоматически при каждой загрузке с помощью следующей записи в /etc/fstab:

procfs /emul/linux/proc procfs ro,linux
 
Обновлено: 16.03.2015