- PVSM.RU - https://www.pvsm.ru -
Информация в предыдущем посте [1] устарела почти на 4 года, и меня попросили её обновить. Так же попросили не смешивать в одном посте установку с настройкой, поэтому здесь будет только установка, а по настройке я планирую отдельный пост в ближайшее время.
Итак, мы будем устанавливать распределённую ОС Inferno [2]. На официальном сайте [3] есть инструкции по установке [4], но они не совсем корректны и тоже немного устарели. Inferno может работать в двух режимах — native (на голом железе или в qemu/etc. как все обычные ОС) и hosted (как обычное приложение под *NIX/Win). Инструкции по установке native Inferno [5] можно найти в русской вики [6]. Помимо этого существуют и другие варианты — например, установка Inferno на Android (англ.) [7]. Лично я смысла в использовании native Inferno на обычных компах не вижу, поэтому буду описывать установку hosted Inferno под Gentoo, Ubuntu, FreeBSD, MacOSX и Windows.
Теоретически, последняя официальная версия «Fourth Edition» вышла примерно в 2004 году. Текущая версия находится в Mercurial репозитории на Google Code, и называет себя «New Edition». Практически, использовать что либо кроме текущей версии из репозитория нет смысла — она абсолютно стабильна, и всегда была стабильна. Её и будем ставить.
Инферно можно установить общесистемно (напр. в /usr/inferno/), чтобы все пользователи могли ей пользоваться. Инферно поддерживает всё, что для этого требуется — работу с правами пользователей, отдельные домашние каталоги, etc. С другой стороны, инферно можно поставить просто в свой домашний каталог (напр. в ~/inferno/), что даже удобнее. Прошлую статью я немного переусложнил описывая одновременно оба способа, но сейчас решил, что проще будет описать только однопользовательский вариант установки. Если у кого-то из читателей этой статьи есть сервер, на котором больше одного пользователя инферно — он вряд ли нуждается в моих инструкциях по установке инферно. ;-) Так что ставить будем в ~/inferno/ на *NIX системах, и в C:inferno на винде.
OS Inferno 32-битная. Поэтому для установки и запуска в 64-битных OS необходима поддержка 32-битных приложений в этих OS. К сожалению, под 64-битной FreeBSD-9.0 мне так и не удалось запустить инферно.
Инферно выполняет код в виртуальной машине, плюс поддерживает JIT, поэтому у неё те же проблемы с разнообразными защитами что и у Java, etc. В предыдущей статье я уделил этой теме больше внимания, если возникнут вопросы — посмотрите там.
Установленная инферно занимает примерно 200MB. А вот на установку компиляторов может потребоваться до 3-х с лишним гигабайт (например на Xcode или Visual Studio). А компилируется инферно буквально за пару минут на средней системе.
При установке инферно в домашний каталог следует иметь в виду, что инферно не любит спец.символы в именах файлов/каталогов, так что если путь к домашнему каталогу содержит, например, пробел — могут возникнуть не учтённые мной сложности.
В (Hardened) Gentoo Linux 32/64-bit всё тривиально — есть пакет, который ставит инферно общесистемно в /usr/inferno/:
layman -a powerman
emerge inferno
А с остальными операционками сейчас будем разбираться.
sudo apt-get install -y mercurial
sudo apt-get install -y libxext-dev
sudo apt-get install -y mercurial
sudo apt-get install -y libc6-dev-i386
sudo apt-get install -y libxext-dev:i386
pkg_add -r mercurial
У меня уже были установлены Xcode (3.2.2) и Mercurial (1.7.1).
Устанавливаем Xcode (4.3.2) через App Store.
Запускаем Xcode, идём в меню Xcode — Preferences — Downloads и нажимаем Install для Command Line Tools.
Идём на mercurial.berkwood.com [8] и качаем/ставим текущую версию (Mercurial 2.2.2 for OS X 10.7).
Идём на mercurial.selenic.com/downloads [9] и качаем/ставим текущую версию (2.2.2).
А вот с компилятором есть варианты. Напрашивающийся вариант с установкой Visual Studio Express обойдётся в 3 с лишним гига на винте. Альтернативный вариант — поставить WinSDK — обойдётся примерно в 800 мегабайт. Я опишу оба варианта, выбирайте сами.
Первый вариант. Идём на www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express [10] и качаем/ставим/обновляем (по русскому обычаю — трижды :) иначе не все обновления установятся) «Visual C++ 2010 Express».
Второй вариант. Сначала идём на go.microsoft.com/fwlink/?LinkId=187668 [11] и качаем/ставим полный ".NET Framework 4". Потом идём на www.microsoft.com/en-us/download/details.aspx?id=8442 [12] и качаем/ставим «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, поэтому в репозитории их нет.
wget http://www.vitanuova.com/dist/4e/inferno-20100120.tgz
tar xzf inferno-20100120.tgz
cd inferno/
hg pull -uv
Скачиваем www.vitanuova.com/dist/4e/inferno-20100120.tgz [13]
Распаковываем в C:inferno. Не знаю, что нужно для распаковки .tgz под виндой — у меня стояли Far и 7Zip, распаковывал Far-ом.
Запускаем cmd.
cd inferno
hg pull -uv
Выходим из cmd.
Единственная реально необходимая переменная — это PATH. В EMU задаются параметры по умолчанию для запуска инферно, она нужна просто для удобства. Что касается INFERNO_ROOT то инферно про неё вообще не знает, но эта переменная нам пригодится в будущем, когда мы займёмся настройкой инферно. Помимо установки переменных в текущем сеансе, пропишем их в стартовые скрипты.
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
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
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
Идём в: Панель Управления -> Система -> Дополнительные параметры системы (в XP просто «Дополнительно») -> Переменные среды.
Добавляем в конец Path: ;C:infernoNt386bin
Создаём новую переменную: INFERNO_ROOT: C:inferno
Создаём новую переменную: EMU: -rC:inferno
Можно отредактировать файл mkconfig вручную во всех ОС, но для простоты я где возможно приведу команды автоматически изменяющие конфиг.
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
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
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
Редактируем mkconfig:
ROOT=c:/inferno
SYSHOST=Nt
OBJTYPE=386
sh makemk.sh
mk nuke
mk install # пропустите эту команду на серверах без X-ов и GUI
mk CONF=emu-g install
Если вы ставили 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-битный компилятор (но возможно это делается примерно так же).
Что делать дальше — описано в следующем пункте для всех версий винды.
Запускаем «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
.png)
Тем, кто не остановится на установке системы, может быть интересно почитать моё описание Limbo на русском [14], текущую версию man-документации в html [15], посмотреть на мои инферно модули и приложения [16] и большой архив приложений под инферно от mjl [17]. Англоязычное коммьюнити обитает в maillist-е [18] и на IRC #inferno в сети freenode.
Заранее отвечаю на традиционный вопрос «кому и зачем всё это нужно». В hosted режиме инферно используется примерно так же, как Erlang, Java или Go — для разработки приложений на классном языке программирования, которые выполняются в очень приятной среде, которые просто и комфортно писать и которые работают как минимум не хуже, чем аналогичные приложения на других языках. В отличие от Erlang в Inferno нет многих вещей «из коробки» (но они без проблем реализуются ручками при необходимости) зато это система общего назначения пригодная для решения любых задач (ну, кроме низкоуровневых драйверов и т.п., как обычно). В отличие от Java мы имеем полноценные лёгкие нити и возможность писать приложения в стиле CSP. В отличие от Go мы имеем виртуализированную и упрощённую среду, идентичную под любыми ОС. В общем, инферно действительно отличная система давно готовая к использованию в продакшне на коммерческих проектах (мы её именно там и используем) и заслуживает гораздо большей популярности, чем имеет.
Автор: powerman
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/9644
Ссылки в тексте:
[1] предыдущем посте: http://habrahabr.ru/post/42998/
[2] распределённую ОС Inferno: http://code.google.com/p/inferno-os/
[3] официальном сайте: http://www.vitanuova.com/inferno/index.html
[4] инструкции по установке: http://www.vitanuova.com/inferno/downloads.html
[5] Инструкции по установке native Inferno: http://inferno.execbit.ru/wiki.wsgi/Установка#native
[6] русской вики: http://inferno.execbit.ru/wiki.wsgi/Inferno%20OS
[7] установка Inferno на Android (англ.): http://www.bluishcoder.co.nz/2012/06/11/building-inferno-os-for-android-phones.html
[8] mercurial.berkwood.com: http://mercurial.berkwood.com
[9] mercurial.selenic.com/downloads: http://mercurial.selenic.com/downloads
[10] www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
[11] go.microsoft.com/fwlink/?LinkId=187668: http://go.microsoft.com/fwlink/?LinkId=187668
[12] www.microsoft.com/en-us/download/details.aspx?id=8442: https://www.microsoft.com/en-us/download/details.aspx?id=8442
[13] www.vitanuova.com/dist/4e/inferno-20100120.tgz: http://www.vitanuova.com/dist/4e/inferno-20100120.tgz
[14] описание Limbo на русском: http://powerman.name/Inferno/Limbo.html
[15] текущую версию man-документации в html: http://powerman.name/Inferno/man/
[16] мои инферно модули и приложения: http://code.google.com/u/115721750737590505257/
[17] большой архив приложений под инферно от mjl: http://www.ueber.net/code/
[18] maillist-е: http://www.vitanuova.com/news/newsgroup.html
Нажмите здесь для печати.