Run linux on freebsd

Run linux on freebsd

Сейчас 2006 год. 125 метров? — да тьфу, копейки.

Решение, вероятно, работает, но делать такое — ересь.

2.2 , Bad_UID ( ? ), 17:16, 05/10/2006 [^] [^^] [^^^] [ответить] + / –
А попробуй ради интереса запустить динамически слинкованный бинарник от linux 2.4 на FreeBSD 6.1. И чтоб он имел корректный доступ к /etc.

А насчет 125 метров это конечно не криминал, но зачем держать на машине ненужное барахло ?

  • 3.11 , GateKeeper ( ?? ), 11:09, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    /compat/etc ?
    если нет, то давно ли системы конфигов по фряхе и всем-версиям-дистрибуции-линуха стали едиными?
  • 4.12 , Bad_UID ( ? ), 11:16, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    речь не о полной эмуляции linux shell, а о запуске бинарников.
    А доступ нужен именно к /etc ибо /compat/linux/etc/ нафиг никому не нужен.
  • 5.14 , kordv ( ? ), 13:51, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    В BSD есть что-то вроде mount —rbind /etc /compat/linux/etc ?
  • 5.16 , GateKeeper ( ?? ), 14:24, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    не подскажете в чем принципиальная разница для линух-приложения между /etc и /compat/linux/etc, рассмотрев это с учётом упоминавшегося уже тут mount_unionfs(8) или же mount_nullfs(8)?
    1.3 , prox ( ? ), 17:49, 05/10/2006 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Извините за оффтоп, но может кто-то уже имел опыт запуска openMosix кластера на FreeBSD-машинках?
    Животрепещущая, я бы сказал, тема.

    MPI-кластер поднял уже, но на нём удобнее решать громоздкие задачищи типа John the ripper или make -j64 buildworld
    А вот скажем, поиметь его для OpenOffice.Org к примеру пока не удавалось.
    Почитал по бордам — openMosix такое позволяет но только под линуксами. И везде оговорки что он работает на уровне ядра.
    так вот, как бы под BSD что-то подобное поиметь.
    если есть чем поделиться — милости прошу в мыло.

  • 2.4 , Bad_UID ( ? ), 17:58, 05/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    Если патчи на уровне ядра, то врядли. Если только в BSD напишут эмуляцию этих системных вызовов.
  • 2.19, chip ( ok ), 16:38, 10/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    >> Извините за оффтоп, но может кто-то уже имел опыт запуска openMosix кластера на FreeBSD-машинках?

    Разве openMosix еще жив? То что есть на 2.6.x он стабильно не живёт судя по отзывам.

    1.5 , просто Гость потрясенный этим. ( ? ), 18:16, 05/10/2006 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Хм. Это статья?? Это не статья, а просто решение.
    Достаточно просто бинарников из тех же портов.
    1.6 , Alexey ( ?? ), 20:00, 05/10/2006 [ответить] [﹢﹢﹢] [ · · · ] + / –
    А такими строчками в /etc/libmap.conf

    [/path/to/linux_binary/binary_executedfile]
    libc.so.6 libc.so.1

    Вместо hexedit не прокатывает?

    2.7 , Bad_UID ( ? ), 22:07, 05/10/2006 [^] [^^] [^^^] [ответить] + / –
    >А такими строчками в /etc/libmap.conf
    >
    >[/path/to/linux_binary/binary_executedfile]
    >libc.so.6 libc.so.1
    >
    >
    >Вместо hexedit не прокатывает?

    В эту сторону не смотрел к сожалению. Посмотрю на досуге. Спасибо.
    Но всё-таки две libc.so.6 в системе не есть гут 🙁

  • 3.13 , Alexey ( ?? ), 13:30, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    Это не две libc.so.6.
    Это способо заставить бинарник использовать другую so-ку
    без hexedit.
  • 4.15 , Bad_UID ( ? ), 14:11, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    это я понял. спасиба.
    я про две libc.so.6 в эмуляторе и в системе.
    1.8 , nuclight ( ? ), 22:09, 05/10/2006 [ответить] [﹢﹢﹢] [ · · · ] + / –
    А нахрена нужен этот веритас, если есть другие решения для бэкапа? 🙂

    Набор бекапируемых систем:
    Solaris 9 + Oracle
    SunOs 5.9 + Oracle
    25 серверов Win2000, Win2003 на половине которых стоит MSSQL.
    5 серверов FreeBSD под разные задачи.
    2 аппаратных Firewall от ISS на Линуксе 2.4.18.
    Exchange и прочая шняга.

    Из бекапного оборудования 2 двухприводные библиотеки DELL 132T.

    При условии того, что Arcserve эти библиотеки в упор не видит, NTBackup просто напросто в них заблудится.

    из задач бекапирования: snapshot файловой системы с открытыми файлами, snapshot systemstate, snapshot MSSQL + Oracle, файловые шары в огромном количестве и прочая фигня типа шифрованных данных.

    Подскажете решение ? Может есть что-то, что лучше справится с этой задачей ?
    Я пока не нашел.

  • 3.10 , Jet ( ?? ), 01:33, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    просто nuclight не с курсе какие бывают проблемы с бэкапом 🙂
  • 3.17, McUrex ( ?? ), 23:49, 06/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    Эти задачи решит bacula.
  • 4.18, Bad_UID ( ? ), 20:25, 07/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    почитал про неё, слишком много но.
  • 3.20, chip ( ok ), 16:42, 10/10/2006 [^] [^^] [^^^] [ответить]
  • + / –
    > Solaris 9 + Oracle
    > SunOs 5.9 + Oracle
    > 25 серверов Win2000, Win2003 на половине которых стоит MSSQL.
    > 5 серверов FreeBSD под разные задачи.
    > 2 аппаратных Firewall от ISS на Линуксе 2.4.18.
    > Exchange и прочая шняга.

    > Из бекапного оборудования 2 двухприводные библиотеки DELL 132T.

    Источник

    » Статьи » Все об эмуляции Linux во FreeBSD

    Все об эмуляции Linux во FreeBSD

    Статьи

    Несмотря на то что современная FreeBSD достаточно популярна и хорошо подходит для применения в самых различных сферах: от высоконагруженных серверов до домашних компьютеров, она все же уступает Linux в одном немаловажном отношении — доступности программного обеспечения. Разработчики коммерческого ПО неохотно портируют свои продукты во FreeBSD, останавливаясь на ее гораздо более популярном конкуренте. К счастью, есть выход — эмуляция Linux.

    Как это работает

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

    Во-первых, эмуляция Linux — это вовсе не эмуляция, а имитация, прослойка, которая позволяет FreeBSD выдавать себя за Linux. Несмотря на то что почти все серьезные UNIX-подобные операционные системы совместимы между собой на уровне API (Application Programming Interface) и следуют стандарту POSIX, бинарный интерфейс (ABI — Application Binary Interface) этих ОС в большинстве случаев не совпадает. Например, FreeBSD использует Си-конвенцию системных вызовов, которая предусматривает передачу аргументов через стек, в то время как Linux требует, чтобы аргументы системных вызовов передавались в регистрах общего назначения. Кроме того, наборы системных вызовов Linux и FreeBSD в некоторых местах не совпадают.

    Если исходный код программы доступен и написан с соблюдением общепринятых стандартов (в первую очередь POSIX), то не составит труда пересобрать программу для конкретной операционной системы (о совместимости ABI позаботится компилятор и низкоуровневые библиотеки), но что делать, если доступ к исходному коду закрыт? На этот случай во FreeBSD и других BSD-системах предусмотрен уровень совместимости, позволяющий операционной системе имитировать ABI другой UNIX-подобной ОС. Благодаря этому уровню «чужие» программы даже не догадываются о том, что их исполнение происходит в другой операционной системе.

    Если мы рассмотрим процесс загрузки и исполнения бинарного файла Linux во FreeBSD подробнее, то увидим следующее. Прочитав заголовок исполняемого файла, FreeBSD найдет в нем специальную метку, говорящую о том, что это бинарный файл Linux, и активизирует уровень совместимости, который предоставит созданному процессу таблицу системных вызовов, совместимую с Linux. При этом сам процесс будет помещен в chroot-окружение (/compat/linux), содержащее копию среды Linux (то есть все, что может потребоваться программе во время работы, и в первую очередь библиотеки). Исполняясь в этой среде, процесс сможет обращаться к системным вызовам, загружать библиотеки, читать/писать файлы и делать все, что позволит ОС.

    Несколько лет назад для запуска программ Linux во FreeBSD от пользователя требовалось пометить исполняемый файл специальным флагом (команда «brandelf -t Linux файл»), чтобы ядро смогло определить, что запускается бинарный файл Linux, и активировать режим совместимости. Современные версии компиляторов выставляют такую метку самостоятельно, и необходимость в этой процедуре возникает только в том случае, если пользователь запускает очень древнюю программу.

    Настройка

    Настройку двоичной совместимости с Linux условно можно разделить на два этапа. Первый — это конфигурирование ядра таким образом, чтобы научить его правильно обрабатывать исполняемые файлы, собранные для Linux. А второй — установка Linux-окружения, в котором эти файлы смогут корректно исполняться.

    Пространство ядра

    Для того чтобы научить ядро FreeBSD понимать исполняемые файлы Linux, достаточно подгрузить модуль linux.ko (kldload linux), содержащий все необходимые обработчики и альтернативную таблицу системных вызовов. После этого операционная система фактически будет готова к принятию «чужого» кода. Для «закрепления результата» следует добавить строку « linux_load=»YES» » в /boot/loader.conf (загрузка одновременно с ядром), либо « linux_enable=»YES» » в /etc/rc.conf (загрузка во время инициализации системы).

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

    Если сборка будет происходить для архитектуры amd64, то вместо COMPAT_LINUX следует указать строку COMPAT_LINUX32. Последние две строки указывают на то, что код Linux-реализаций файловых систем proc и sys также должен быть включен в ядро. Делать это не обязательно, каждая из них может быть собрана модулем.

    На этом настройка ядра заканчивается, и мы переходим к конфигурированию Linux-окружения.

    Пространство пользователя

    Как уже было сказано ранее, исполнение бинарных файлов Linux происходит в изолированном окружении, которое располагается в каталоге /compat/linux. Чтобы программы могли работать в таком окружении, им требуется доступ ко всем необходимым библиотекам, конфигурационным файлам и специальным файлам, вроде тех, что находятся в каталоге /proc. Есть несколько способов обеспечить наличие этих файлов, мы рассмотрим их все.

    Вариант первый. Классический

    Первый и самый правильный прием, рекомендуемый разработчиками FreeBSD, заключается в установке окружения через коллекцию портов. Существует несколько портов, воссоздающих окружение времени исполнения различных дистрибутивов Linux. В современных версиях FreeBSD средой исполнения по умолчанию является набор пакетов из дистрибутива Fedora Core 4 (emulators/linux_base-fc4), также доступны коллекции пакетов из дистрибутива Gentoo 2006.0 (linux_base-gentoo-stage1, linux_base-gentoo-stage2 и linux_base-gentoo-stage3). По большому счету неважно, какой из них использовать. Необходимость в переключении на окружение другого дистрибутива может возникнуть только в случае, если программа откажется работать в среде, установленной в данный момент.

    В случае если Linux-окружение не было установлено во время инсталляции операционной системы, необходимо воспользоваться командой pkg_add /cdrom/packages/All/linux_base-fc-4_9.tbz (имя пакета может отличаться в зависимости от версии FreeBSD), либо пройти в каталог /usr/ports/emulators/linux_base-fc4 и набрать «make install clean». После того как одна из этих операций будет проделана, каталог /compat/linux превратится в локальную версию дистрибутива Linux.

    Теперь необходимо обеспечить доступ к виртуальным файловым системам, без этого действия некоторые программы Linux откажутся работать. Открываем файл /etc/fstab и добавляем в него следующие строки:

    none /compat/linux/proc linprocfs rw 0 0

    none /compat/linux/sys linsysfs rw 0 0

    none /compat/linux/dev devfs rw 0 0

    Первые две строки указывают на то, что к каталогам proc и sys, находящимся внутри окружения Linux, необходимо подключить Linux-версии файловых систем procfs и sysfs. Последняя же строка говорит о том, что к каталогу dev также должна быть примонтирована родная файловая система devfs. Это может показаться абсурдом, так как практически ни один специальный файл этого каталога не совпадает по имени у FreeBSD и Linux. На самом деле, файловая система devfs нужна только для того, чтобы Linux-программы смогли выводить звук, ведь интерфейс OSS, используемый в обеих операционных системах, является стандартом и одинаков в Linux и FreeBSD.

    После того как операция по модификации файла /etc/fstab будет закончена, набираем «mount –a», чтобы изменения вступили в силу. Это все, теперь внутри твоей FreeBSD поселился самый настоящий Linux. Ты даже можешь переместиться в него, набрав от имени суперпользователя команду chroot /compat/linux /bin/bash. Все программы Linux теперь должны запускаться и корректно работать. Это относится не только к простым программам, вроде xcalc, но и к комплексным, вроде Quake4 или UT2004. При этом гарантируется, что программа будет работать с такой скоростью, как если бы она была запущена в настоящем Linux.

    Вариант второй. Грязный

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

    В общем случае все, что требуется сделать, — это скопировать базовый комплект дистрибутивных пакетов и распаковать их в каталог /compat/linux. Это не так трудно, как кажется на первый взгляд. Следует установить FreeBSD-версию пакетного менеджера подопытного дистрибутива (например, archivers/rpm4 или archivers/dpkg) и с его помощью накатить нужные пакеты. Впоследствии недостающие пакеты можно добавить, используя уже родные Linux-версии этих программ:

    Установка дополнительных пакетов

    Red Hat/Fedora Core

    # /compat/linux/bin/rpm -ihv —root=/compat/linux пакет.rpm

    Debian/Ubuntu

    # /compat/linux/usr/bin/dpkg -i —root=/compat/linux пакет.dpkg

    Вариант третий. Простой

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

    Вариант четвертый. Радикальный

    Четвертый и последний вариант довольно радикальный и издевательский по своей задумке. Он применим в тех случаях, когда необходимо обеспечить Linux-программе доступ к корневой файловой системе (например, если программа должна обращаться к «настоящей» версии каталога /etc). Chroot-окружение, в которое помещается любой процесс Linux, не предоставляет такой возможности (в этом и заключается смысл песочницы). Но есть выход: можно просто создать ссылку /compat/linux, указывающую на корень ( rm -rf /compat/linux && ln -s / /compat/linux ), и тогда chroot-окружение станет идентичным корню. Проблема только в том, что Linux-программы не смогут работать с библиотеками FreeBSD, им нужны их нативные версии. Просто скопировать эти библиотеки в корень не удастся по причине пересечения имен, поэтому следует переименовать их по определенной схеме (например, libc.so.6 в libc-linux.so.6). После этого в файл /etc/libmap.conf можно добавить такие строки:

    И так для всех библиотек, требуемых программе. Сами же Linux-программы следует положить в каталог /home/username/linux, именно для него будет действовать приведенное переназначение имен. Описанный способ может показаться слишком грубым, но он действительно работает и может помочь в определенных обстоятельствах.

    Для тех отважных юниксоидов, что идут в ногу с прогрессом и используют последний срез CVS седьмой версии FreeBSD, рекомендую переключить режим совместимости на имитацию ядра Linux версии 2.6.19: sysctl compat.linux.osrelease=2.6.19. Версия 2.4.2, имитируемая по умолчанию, уже не удовлетворяет потребностям современных Linux-программ.

    Коллекция портов FreeBSD насчитывает несколько десятков так называемых Linux-портов. Чтобы найти их, находясь в каталоге /usr/ports, набери команду make search name=linux-.

    Переменные sysctl

    Существует три переменные ядра, напрямую относящиеся к уровню совместимости с Linux: compat.linux.osname — имя имитируемой операционной системы; compat.linux.osrelease — версия ядра Linux, стабильные версии FreeBSD поддерживают только совместимость с ядром версии 2.4.2 (во FreeBSD 7 была добавлена поддержка ядра 2.6.19); compat.linux.oss_version — версия интерфейса OSS (Open Sound System).

    Развеиваем миф о драйверах nVidia

    Среди пользователей широко распространено мнение о том, что фирменные драйверы nVidia для FreeBSD — это не что иное, как драйверы Linux, работающие в режиме совместимости с Linux. Это, конечно же, неправда, на данный момент FreeBSD способна имитировать только ABI Linux, а не постоянно изменяющийся интерфейс между ядром и драйверами. Модуль совместимости с Linux, который так «любят» драйверы nVidia, нужен только для того, чтобы позволить пользователю играть в Linux-версии коммерческих игр.

    Источник

    Читайте также:  Ttl мастер для windows
    Оцените статью