Установка OS Inferno New Edition (update)

в 2:30, , рубрики: freebsd, gentoo, inferno, linux, macos x, Ubuntu, windows, операционные системы, установка ос, метки: , , , , , , ,

Информация в предыдущем посте устарела почти на 4 года, и меня попросили её обновить. Так же попросили не смешивать в одном посте установку с настройкой, поэтому здесь будет только установка, а по настройке я планирую отдельный пост в ближайшее время.

Итак, мы будем устанавливать распределённую ОС Inferno. На официальном сайте есть инструкции по установке, но они не совсем корректны и тоже немного устарели. Inferno может работать в двух режимах — native (на голом железе или в qemu/etc. как все обычные ОС) и hosted (как обычное приложение под *NIX/Win). Инструкции по установке native Inferno можно найти в русской вики. Помимо этого существуют и другие варианты — например, установка Inferno на Android (англ.). Лично я смысла в использовании native Inferno на обычных компах не вижу, поэтому буду описывать установку hosted Inferno под Gentoo, Ubuntu, FreeBSD, MacOSX и Windows.

Особенности установки

Версии OS Inferno

Теоретически, последняя официальная версия «Fourth Edition» вышла примерно в 2004 году. Текущая версия находится в Mercurial репозитории на Google Code, и называет себя «New Edition». Практически, использовать что либо кроме текущей версии из репозитория нет смысла — она абсолютно стабильна, и всегда была стабильна. Её и будем ставить.

Одно- или много- пользовательский стиль установки

Инферно можно установить общесистемно (напр. в /usr/inferno/), чтобы все пользователи могли ей пользоваться. Инферно поддерживает всё, что для этого требуется — работу с правами пользователей, отдельные домашние каталоги, etc. С другой стороны, инферно можно поставить просто в свой домашний каталог (напр. в ~/inferno/), что даже удобнее. Прошлую статью я немного переусложнил описывая одновременно оба способа, но сейчас решил, что проще будет описать только однопользовательский вариант установки. Если у кого-то из читателей этой статьи есть сервер, на котором больше одного пользователя инферно — он вряд ли нуждается в моих инструкциях по установке инферно. ;-) Так что ставить будем в ~/inferno/ на *NIX системах, и в C:inferno на винде.

32/64 бита

OS Inferno 32-битная. Поэтому для установки и запуска в 64-битных OS необходима поддержка 32-битных приложений в этих OS. К сожалению, под 64-битной FreeBSD-9.0 мне так и не удалось запустить инферно.

Hardened/PaX/SeLinux/etc.

Инферно выполняет код в виртуальной машине, плюс поддерживает JIT, поэтому у неё те же проблемы с разнообразными защитами что и у Java, etc. В предыдущей статье я уделил этой теме больше внимания, если возникнут вопросы — посмотрите там.

Время и место

Установленная инферно занимает примерно 200MB. А вот на установку компиляторов может потребоваться до 3-х с лишним гигабайт (например на Xcode или Visual Studio). А компилируется инферно буквально за пару минут на средней системе.

Расположение

При установке инферно в домашний каталог следует иметь в виду, что инферно не любит спец.символы в именах файлов/каталогов, так что если путь к домашнему каталогу содержит, например, пробел — могут возникнуть не учтённые мной сложности.

Установка

В (Hardened) Gentoo Linux 32/64-bit всё тривиально — есть пакет, который ставит инферно общесистемно в /usr/inferno/:

layman -a powerman
emerge inferno

А с остальными операционками сейчас будем разбираться.

Mercurial, компиляторы и все все все

… Ubuntu 12.04 32-bit

sudo apt-get install -y mercurial
sudo apt-get install -y libxext-dev

… Ubuntu 12.04 64-bit

sudo apt-get install -y mercurial
sudo apt-get install -y libc6-dev-i386
sudo apt-get install -y libxext-dev:i386

… FreeBSD 8.0 32-bit

pkg_add -r mercurial

… Mac OS X 10.6.8 Snow Leopard 32-bit

У меня уже были установлены Xcode (3.2.2) и Mercurial (1.7.1).

… Mac OS X 10.7.4 Lion 64-bit

Устанавливаем Xcode (4.3.2) через App Store.
Запускаем Xcode, идём в меню Xcode — Preferences — Downloads и нажимаем Install для Command Line Tools.
Идём на mercurial.berkwood.com и качаем/ставим текущую версию (Mercurial 2.2.2 for OS X 10.7).

… Windows (XP 32-bit, Seven 32-bit, Seven 64-bit)

Идём на mercurial.selenic.com/downloads и качаем/ставим текущую версию (2.2.2).

А вот с компилятором есть варианты. Напрашивающийся вариант с установкой Visual Studio Express обойдётся в 3 с лишним гига на винте. Альтернативный вариант — поставить WinSDK — обойдётся примерно в 800 мегабайт. Я опишу оба варианта, выбирайте сами.

Первый вариант. Идём на www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express и качаем/ставим/обновляем (по русскому обычаю — трижды :) иначе не все обновления установятся) «Visual C++ 2010 Express».

Второй вариант. Сначала идём на go.microsoft.com/fwlink/?LinkId=187668 и качаем/ставим полный ".NET Framework 4". Потом идём на www.microsoft.com/en-us/download/details.aspx?id=8442 и качаем/ставим «Windows SDK 7.1». При установке достаточно ограничиться этими пунктами:

#    Windows Native Code Development:
#          Windows Headers and Libraries:
#            [X] Windows Headers
#            [X] x86 Libraries
#      [X] Visual C++ Compilers
#    Redistributable Packages:
#      [X] Microsoft Visual C++ 2010

Потом тоже обновляем. На самом деле обновлять, наверное, не обязательно, просто уже вошло в привычку.

Скачиваем и обновляем исходники инферно

Не смотря на то, что на официальном сайте для винды предлагается отдельный архив, а для мака отдельные бинарники, нам это всё не нужно, и даже вредно (архив для винды не обновляется нормально из репозитория — возникают конфликты). Так что под всеми ОС будем устанавливаться из inferno-20100120.tgz. Смысл использовать этот архив вместо простого клонирования репозитория в том, что в архив включены некоторые файлы (в основном шрифты), которые лицензия запрещает выкладывать на Google Code, поэтому в репозитории их нет.

… *NIX

wget http://www.vitanuova.com/dist/4e/inferno-20100120.tgz
tar xzf inferno-20100120.tgz
cd inferno/
hg pull -uv

… Win

Скачиваем www.vitanuova.com/dist/4e/inferno-20100120.tgz
Распаковываем в C:inferno. Не знаю, что нужно для распаковки .tgz под виндой — у меня стояли Far и 7Zip, распаковывал Far-ом.
Запускаем cmd.

cd inferno
hg pull -uv

Выходим из cmd.

Настраиваем переменные окружения

Единственная реально необходимая переменная — это PATH. В EMU задаются параметры по умолчанию для запуска инферно, она нужна просто для удобства. Что касается INFERNO_ROOT то инферно про неё вообще не знает, но эта переменная нам пригодится в будущем, когда мы займёмся настройкой инферно. Помимо установки переменных в текущем сеансе, пропишем их в стартовые скрипты.

… Linux

export INFERNO_ROOT=$(pwd)
export PATH=$INFERNO_ROOT/Linux/386/bin:$PATH
export EMU=-r$INFERNO_ROOT
echo "export INFERNO_ROOT=$INFERNO_ROOT"                   >> ~/.bashrc
echo "export PATH=$INFERNO_ROOT/Linux/386/bin:$PATH"    >> ~/.bashrc
echo "export EMU=-r$INFERNO_ROOT"                         >> ~/.bashrc

… FreeBSD

export INFERNO_ROOT=$(pwd)
export PATH=$INFERNO_ROOT/FreeBSD/386/bin:$PATH
export EMU=-r$INFERNO_ROOT
echo "export INFERNO_ROOT=$INFERNO_ROOT"                   >> ~/.bash_profile
echo "export PATH=$INFERNO_ROOT/FreeBSD/386/bin:$PATH"  >> ~/.bash_profile
echo "export EMU=-r$INFERNO_ROOT"                         >> ~/.bash_profile

… Mac OS X

export INFERNO_ROOT=$(pwd)
export PATH=$INFERNO_ROOT/MacOSX/386/bin:$PATH
export EMU=-r$INFERNO_ROOT
echo "export INFERNO_ROOT=$INFERNO_ROOT"                   >> ~/.bash_profile
echo "export PATH=$INFERNO_ROOT/MacOSX/386/bin:$PATH"   >> ~/.bash_profile
echo "export EMU=-r$INFERNO_ROOT"                         >> ~/.bash_profile

… Win

Идём в: Панель Управления -> Система -> Дополнительные параметры системы (в XP просто «Дополнительно») -> Переменные среды.
Добавляем в конец Path: ;C:infernoNt386bin
Создаём новую переменную: INFERNO_ROOT: C:inferno
Создаём новую переменную: EMU: -rC:inferno

Настраиваем параметры сборки

Можно отредактировать файл mkconfig вручную во всех ОС, но для простоты я где возможно приведу команды автоматически изменяющие конфиг.

… Linux

perl -i -pe 's/^ROOT=.*/ROOT=$ENV{INFERNO_ROOT}/m'  mkconfig
perl -i -pe 's/^SYSHOST=.*/SYSHOST=Linux/m'         mkconfig
perl -i -pe 's/^OBJTYPE=.*/OBJTYPE=386/m'           mkconfig

В линухе инферно поддерживает IPv6. Более того, оный IPv6 используется по умолчанию. Подходит это вам или нет — решайте сами. Я лично его выключаю:

perl -i -pe 's/ipif6/ipif/g' emu/Linux/emu emu/Linux/emu-g

… FreeBSD

perl -i -pe 's/^ROOT=.*/ROOT=$ENV{INFERNO_ROOT}/m'  mkconfig
perl -i -pe 's/^SYSHOST=.*/SYSHOST=FreeBSD/m'       mkconfig
perl -i -pe 's/^OBJTYPE=.*/OBJTYPE=386/m'           mkconfig

… Mac OS X

perl -i -pe 's/^ROOT=.*/ROOT=$ENV{INFERNO_ROOT}/m'  mkconfig
perl -i -pe 's/^SYSHOST=.*/SYSHOST=MacOSX/m'        mkconfig
perl -i -pe 's/^OBJTYPE=.*/OBJTYPE=386/m'           mkconfig

… Win

Редактируем mkconfig:

ROOT=c:/inferno
SYSHOST=Nt
OBJTYPE=386

Сборка

… *NIX

sh makemk.sh
mk nuke
mk install          # пропустите эту команду на серверах без X-ов и GUI
mk CONF=emu-g install

… Win Seven 64-bit

Если вы ставили WinSDK, то нужно сделать новый ярлык на «Windows SDK 7.1 Command Prompt», зайти в его свойства и дописать параметр /x86 — чтобы получилось вот так:
C:WindowsSystem32cmd.exe /E:ON /V:ON /T:0E /K "C:Program FilesMicrosoft SDKsWindowsv7.1BinSetEnv.cmd" /x86
Если вы ставили Visual C++ 2010, то я не знаю, как запустить 32-битный компилятор (но возможно это делается примерно так же).
Что делать дальше — описано в следующем пункте для всех версий винды.

… Win

Запускаем «Windows SDK 7.1 Command Prompt» (ну или «Visual Studio Command Prompt (2010)» — смотря что вы устанавливали).

cd inferno
mk nuke
mk install

Запуск

Собственно, это всё. Теперь вы можете запустить инферно командой emu или emu-g (вторая отличается тем, что не поддерживает графический режим, но зато будет работать на серверах без X-ов и очень удобна для запуска разных сетевых сервисов). Графическую среду можно увидеть запустив внутри emu команду wm/wm:

$ emu
; wm/wm

Установка OS Inferno New Edition (update)

Полезные ссылки

Тем, кто не остановится на установке системы, может быть интересно почитать моё описание Limbo на русском, текущую версию man-документации в html, посмотреть на мои инферно модули и приложения и большой архив приложений под инферно от mjl. Англоязычное коммьюнити обитает в maillist-е и на IRC #inferno в сети freenode.

P.S.

Заранее отвечаю на традиционный вопрос «кому и зачем всё это нужно». В hosted режиме инферно используется примерно так же, как Erlang, Java или Go — для разработки приложений на классном языке программирования, которые выполняются в очень приятной среде, которые просто и комфортно писать и которые работают как минимум не хуже, чем аналогичные приложения на других языках. В отличие от Erlang в Inferno нет многих вещей «из коробки» (но они без проблем реализуются ручками при необходимости) зато это система общего назначения пригодная для решения любых задач (ну, кроме низкоуровневых драйверов и т.п., как обычно). В отличие от Java мы имеем полноценные лёгкие нити и возможность писать приложения в стиле CSP. В отличие от Go мы имеем виртуализированную и упрощённую среду, идентичную под любыми ОС. В общем, инферно действительно отличная система давно готовая к использованию в продакшне на коммерческих проектах (мы её именно там и используем) и заслуживает гораздо большей популярности, чем имеет.

Автор: powerman

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js