Готовый перевод Installing Inferno Software / Установка ОС Inferno: Chapter 1

Часть 3
Запуск Inferno

ОС Iinferno установленная поверх существующей операционной системы (вариант hosted) запускается вызовом emu.
В Windows из менюi Start выберите пункт Inferno. Это вызовет emu с соответствующими аргументами указывающими на файлы в inferno_root. Если вам надо изменить любую из опций переданных emu во время вызова из меню Start, вам надо кликнуть на панеле задач правой кнопкой мыши и выбрать Properties - Start Menu Programs - Advanced для изменения ярлыка используемого для запуска Inferno. Для Unix и Plan9 вам понадобится сообщить emu где находится каталог Inferno передавая ему опцию командной строки -rrootpath. Например:

emu -r/usr/john/inferno

Без опции -r emu будет искать файловое дерево в /usr/inferno на системах Plan9 и Unix, а когда вызывается в среде Windows из командной строки по умолчанию в \inferno на текущем диске. (Если в Windows emu вызывается из меню start, то опции уже указывают правильный каталог) Когда используется графический интерфейс, emu по умолчанию использует разрешение 640*480. Для использования большего размера вам надо передать emu опцию -gXsizexYsize в командной строке. Например:

emu -r/usr/john/inferno -g1024x768

Запущенный таким способом emu откроет командное окно, в котором запущен командный интерпретатор /dis/sh.dis. Чтобы не набирать аргументы при каждом вызове emu, вы можете записать их в переменную окружения EMU, которая проверяется при каждом вызове emu.

set EMU="-rd:\Documents and Settings\john\inferno -g1024x768"

для Windows.

EMU=(-r/usr/john/inferno -g1024x768)

для Plan9, и

EMU="-r/usr/john/inferno -g1024x768"

для Unix. Вместо использования переменной EMU вы можете просто поместить вызов emu в скрипт и запускать его вместо прямого вызова emu. Важно помнить, что в Windows опция -r указывает не только на каталог, в который была установлена Infeno, но и на диск. Без указания имени диска система будет искать на текущем диске и не запустится если пользователь перешел на другой диск.
После того как переменная окружения или скрипт будут установлены, запустите

emu

или соответствующего скрипта приведет к запуску командного интерпретатора Inferno sh(1), который выдаст на экран приглавшение к вводу команд (точка с запятой):

;

Вы можете добавить следующую опцию -c1 чтобы запустить emu в режиме, в котором система компилирует модули Dis во время загрузки в нативные машинные инструкции. (Смотри раздел справки emu(1).) В режиме компиляции существенно возрастает скорость работы программ. В любом случае, будь это режим компилирования или интерпретации у вас теперь есть функционирующая система Inferno в hosted-режиме. Когда Inferno запускает первоначальный /dis/sh.dis он считывает команды из файла /lib/sh/profile перед переходом в интерактивный режим. Смотрите man-страницы интерактивного интерпретатора sh(1) для формирования начального окружения.
По умолчанию, точка с запятой (;) является приглашением интерпретора. Из этого командного окна вы можете увидеть установленные файлы и директории Inferno.

lc /

Команда lc показывает содержимое католога, указанного в аргументе, в виде нескольких колонок.
; lc /
TODO

Только файлы и директории ниже inferno_root видимы процессу Inferno на основной файловой системе; эти файлы видятся как корень файловой системы. Если вы желаете импортировать или экспортировать из основной (host) фаловой системы вам надо использовать инструменты вашей главной ОС для перемещения их _в_ или _из_ видимой Inferno части файловой системы. (За подробностями интерфеса к командам основной ОС обращайтесь к man-страницам os(1) и cmd(3).) (Мы планируем сделать такой доступ прямым, но детали все еще в стадии разработки.) Отсюда и дальше в этом документе все файловые пути не без явного указания inferno_root подразумеваются что они расположены в пространстве Inferno. Файлы созданные в фаловой системе основной ОС будут созданы с идентификатором того пользователя который запустил emu и на системе Unix с group id, к которой принадлежит пользователь.

4. Настройка временной зоны

Настройки временной зоны определяются файлами в директории /locale/timezone. Настроки влияют только на то, как отображается время; внутренне представление не изменяется. Например, файл /locale/GMT определяет время по Гринвичу, /locale/GB-Eire определяет временные зоны для Великобритании и Ирландской Республики, и /locale/US_Eastern определяет Восточное стандартное время EST в США.
Установки временной зоны используются приложениями во время чтения (при обращении к daytime(2)) из файла /locale/timezone, который при установке является копией /locale/GB-Eire. Если отоброжаемое лондонское время вас устраивает, вам ничего не нужно менять. Для установки другой временной зоны скопируйте подходящий файл временной зоны в /locale/timezone:

cp /locale/US_Eastern /locale/timezone

Для установки другой временной зоны для пользователя или текущего окна, выполнение bind(1) связывающий небходимый файл с текущими установками /locale/timezone, приведет к желаемому результату:

bind /locale/US_Eastern /locale/timezone

5. Запуск менеджера окон wm

Графические приложения Inferno обычно работают под управлением менеджера окон wm(1). В Inferno есть простой редактор, wm/edit, который можно использовать для редактирования конфигурационных файлов. "Мощное окружение" для редактирования и разработки программ - это acme(1), но на начальном этапе мы будем использовать более простые средства. Если вы уже знакомы с Acme из Plan 9, или редактором Wily для UNIX, можете спокойно использовать acme вместо edit.

Шаг 5a. Запуск менеджера окон.

Запустите wm напечатав

wm/wm

Вы должны увидеть новое окно с сине-серым задним планом и маленьким логотипом Vita Nuova в нижнем левом углу. Кликните по логотипу мышкой чтобы открыть небольшое меню. Выберите пункт Edit для запуска wm/edit. В общем, большинство программ wm имеют три маленькие кнопки, расположенных в правом верхнем углу. Щелчок на кнопке X правой кнопкой мыши закроет программу. Самая левая из трех кнопок изменяет размер активного окна, перемещая изменивщую цвет одну границ окна или его угол. Средняя кнопка минимзирует окно, создавая пункт в панеле задач внизу оновного окна wm/ Вы сможете восстановить исходный размер окна щелкнув на этом пункте. Исходная конфигурация wm определяется содержимым скрипта /lib/wmsetup (смотри toolbar(1) и sh(1)).

Шаг 5b: Запуск окна интерпретатора.

Выберите shell в меню чтобы открыть окно комадного интерпретатора. Мы продолжим конфигурирование Inferno через это окно.

6. Справочные руководства

Справочные руководства для всех системных команд доступны из окна командного интерпретатора. Используйте команды man или wm/man. Например,

man wm

покажет информацию о команде wm. А

man man

выдаст информацию об исрользовании man. Wm/man позволяет использовать виджет Tk для более привлекательного вывода, чем предоставляет команда man. Здесь и в другой документации Inferno вы увидите ссылочную информацию на страницы руководства man в виде команда(раздел). Вы можете отобразить страницу руководства для некоторой команды следующим образом

man command

или

man секция команда

если команда относится более чем к одной секции.

7. Начальное пространство имен

Начальное пространство имен создается путем подключения корневого устройства "#/" (смотрите root(3)) к корню пространства имен и подключения к нему следующих псевдоустройств:

I) файловой системы низлежащей ОС "#U" (fs(3)),
II) консоли "#c" (cons(3)) к каталогу /dev,
III) файловой системы prog "#p" (prog(3)) к /prog,
IV) IP "#I" (ip(3)) к /net и
V) окружения "#e" (env(3)) к /dev/env.

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

ns

8. Сети

Если вы хотите использовать Inferno для локальной разработки приложений на Limbo, не используя приэтом сетевые возможности ОС, можете пропустить этот раздел и сразу перейти к разделу "Добавление нового пользователя".
Чтобы подключаться к IP-сетям вы должны подключить устройство ip(3) к каталогу /net. Набрав после этого команду

ls -l /net

вы должны увидеть что-то вроде этого:

--rw-rw-r-- I 0 network john 0 May 31 07:11 /net/arp
--rw-rw-r-- I 0 network john 0 May 31 07:11 /net/ndb
d-r-xr-xr-x I 0 network john 0 May 31 07:11 /net/tcp
d-r-xr-xr-x I 0 network john 0 May 31 07:11 /net/udp

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

* импортирующая система должна знать где их искать;
* экспортирующая система должна разрешить их экспорт;
* две системы должны аутентифицировать достпу (не все ресурсы разрешают всем системам или пользователям);
* все передачи должны быть зашифрованы для безопасности от подглядывания и изменения.

В сети Inferno обычно одна машина действует как сервер аутентификации. Все другие системы играют роли серверов и клиентов как и требуется от них: любая система может импортировать некоторые ресурсы (или никакие), одновременно, и разные в разных пространствах имен. В следующих разделах, мы опишем три четко различимые разные машины: сервер аутентификации (signer); сервер (экспортирующий ресурсы); и клиент (импортирующий ресурсы).
С Inferno, вы можете достичь схожего эффекта на еинственной машине запустив одновременно несколько экземпляров emu. Это самы простой путь ознакомиться с процессом (и также избежать установки системы на нескольких машинах). Это является ценным , позднее при установке безопасного сервера аутентификации, особенно если вы пользуетесь Windows на файловой системе FAT, когда защита файлов основной ОС ограничена.
Мы должны теперь сконфигурировать Inferno для реализации каждой из функций перечисленных выше:

* изменить сетевую базу данных для того чтобы найти локальные сетевые ресурсы
* установить систему аутентификации, особенно сервер аутентификации "signer"
* запустить сетевые сервисы (два разных набора: один для аутентификационного сервиса и другой для всех остальных сетевых сервисов)

9. Файлы сетевых баз данных

И в хостед и в нативном режимах, Inferno пользуется коллекцией текстовых файлов в подробной форме хранящей все детали сетевой конфигурации и сервисов. Когда Inferno запущена поверх ОС, Inferno получает большинство данных из основной операционной системы, и база данных содержит специфичную для Inferno данные.
Файл /lib/ndb/local является корневым хранилищем сетевой базы данных. Его формат определяется в ndb(6), но по сути является набором пар атрибут/значение в форме атрибут=значение.
Имена атрибутов и большинтсва значений чувствительны к регистру. Соответствующие пары атрибут/значение сгруппированы в базе данных по "вхождениям" (проводкам/статьям). Вхождение может состоять из одной или нескольких строк: первая строка начинается с не пробельного символа, любая вложенная последовательность строк в которых вхождения начинаются с пробела (или табуляции).

9.1. Параметры системы/сайта

Версия файла /lib/ndb/local записываемая во время инсталяции имеет вид:

database=
file=/lib/ndb/local
file=/lib/ndb/dns
file=/lib/ndb/inferno
file=/lib/ndb/common
infernosite=
#dnsdomain=ваш.домен.com
#dns=1.2.3.4 # resolver
SIGNER=your_Inferno_signer_here
FILESERVER=your_Inferno_fileserver_here
smtp=your_smtpserver_here
pop3=your_pop3server_here
registry=your_registry_server

Индивидуальные файлы формирующие базу перечислены по порядку во вхождениях базы данных. Они пока могут быть проигнорированы. Вхождение помеченное как infernosite= определяет отображение (mapping) из символических имен хостов в форме $service в имя хоста, имя домена, или числовой интернет адрес. Например, приложение которое нуждается в сервисе аутентификации будет ссылаться на $SIGNER и сервис имен Inferno оттранслирует в момент выполнения в соответствующее сетевое имя этого окружения. Следовательно, вхождения выше нуждаются в исправлении для данной системы. (Пункты которые закоментированы не являются необходимыми, когда хост сам выполняет функцию DNS-резолвера, вместо собственного dns(8) в Inferno.)
Например, наш пункт infernosite в файле local может выглядеть следующим образом:

infernosite=
dnsdomain=vitanuova.com
dns=200.1.1.11 # resolver
SIGNER=doppio
FILESERVER=doppio
smtp=doppio
pop3=doppio
registry=doppio

где doppio является именем хоста которое предлагает сервисы Inferno, и 200.1.1.11 это Internet-адресс локального DNS-резолвера.

Шаг 9a: Внесение данных по-умолчанию для вашего сайта

Важнейшими именами являются:

SIGNER - имя хоста или домена, или адрес машины которая будет играть роль "signer" (центр авторизации - CA).
registry - регистратора имен или адресов машин которые предоставляютлокальный динамический сервис registry(4).
FILESERVER - первичный файловый сервер (в действительности требующийся только тем клиентам, которые не имеют своего файлового хранилища)

Все другие используются специфическими приложениями такими как acme(1) mail или ftpfs(4).
Если вы используете одиночную машину как signer и клиент/сервер, поестите ее имя во все эти три вхождения.

9.2. Сервер соединений cs(8) и трансляция имен

Сервер соединений cs(8) пользуется сетевой базой данных и другими данными (которые например, преоставляет основная ОС и серверы DNS) для преобразования символических сетевых имен или сервисов в инструкции для соединения с указанным сервисом. В хостед-режиме, сеть и имена сервисов передаются через основную ОС для преобразования числовых IP адресов и номеров портов. Если основной ОС не удается преобразовать имя сервиса, сервер соединений попытается преобразовать имя используя отображение (mapping) сервисов и имен протоколов в номера портов в соответствии с файлом /lib/ndb/inferno:

tcp=infgamelogin port=6660 # inferno games login service
tcp=styx port=6666 # main file service
tcp=mpeg port=6667 # mpeg stream
tcp=rstyx port=6668 # remote invocation
tcp=infdb port=6669 # database server
tcp=infweb port=6670 # inferno web server
tcp=infsigner port=6671 # inferno signing services
tcp=infcsigner port=6672 # inferno countersigner
tcp=inflogin port=6673 # inferno credential service
tcp=infsds port=6674 # software download
tcp=registry port=6675 # registry(4)
udp=virgil port=2202 # naming service

Пока оставим этот файл как есть. Вам потребуется изменить его только в том случае, если вы добавите новый статически сконфигурированный сервис Inferno. (Сервисы которые запускаются динамически могут использовать registry(4), менеджер регистраций позволяет найти сервис по его описанию)

10. Настройка Signer

Перед тем как Inferno-машина сможет аутентифицировать установленное безопасное соединение к другому Inferno-сервису на другой машине, каждая система должна получить сертификат из одного источника - центра сертификации (CA). Мы поговорим здесь только об одном CA на систему, хотя фактически все зависит от специфики приложения или задачи группы. Например, Inferno-версия игрового сервера автоматически запускает собственный CA для хранения идентификаторов и ключей используемых игровым сервисом отдельно от основносй системы, позволяя пользователям без суеты формировать их собственную игровую группу. Для использования аутентифицированных соединений с первичным файловым сервисом нам надо установить доверенную выдачу сертификатов для пользователей (signer) (смотрите createsignerkey(8) and logind(8)).
Выберите Inferno-машину для выполнения функции signer. Если она первая или единственная машина вашей сети, тогда создайте signer на ней. (Будет более наглядным, если вы заупстите отдельно еще одну копию emu и оставите ее в консольном режиме, без запуска графической системы.) Позднее вы можете передать эту функцию другой машине.

Шаг 10a: Создание пустого файла паролей

Сервер аутентификации проверяет подлинность пользователя путем проверки того, что пользователь знает общий секрет (пароль). (В действительности секрет не используется напрямую, вместо этого передается полученное от него зашифрованное значение.) Файл /keydb/keys содержит эти секреты; он зашифрован с ипользованием пароля или фразы известной только менеджеру сервера аутентификации. После установки Inferno этот файл должен существовать и и быть доступным для чтения только вам ()или пользователям которые запускают сервис аутентификации. На signer-машине наберите:

ls -l /keydb/keys

Вы должны увидеть что-то вроде этого:

--rw------- M 7772 yourname inf 0 Jun 12 03:08 /keydb/keys

Вы должны увидеть что-то вроде показанного выше. Если файл не существует или не пуст или имеет неправыльно установленные атрибуты, выполните:

cp /dev/null /keydb/keys; chmod 600 /keydb/keys

для их правильной установки.

Шаг 10b: Генерирование ключа signer/центра авторизации

Далее, на машине signer, выполните

auth/createsignerkey name

В качестве имени укажите сетевое имя signer-машины. Это может быть полное доменное имя FQDN хоста или короткое имя. Это значение будет фигурировать в качестве имени signer в каждом сертификате генерируемом signer. Createsignerkey создает пару публичный/приватый ключей которые используются signer для выдачи сертификатов. Они храняться в /keydb/signerkey; убедитесь что правами на этот файл обладает только пользователь запускающий сервис аутентификации:

; ls -l /keydb/signerkey
--rw------- M 32685 secrets inf 1010 Jul 07 2000 /keydb/signerkey

Используйте chmod() чтобы установить режим чтения и записи только для владельца:

chmod 600 /keydb/signerkey

Шаг 10c: Запуск сетевых сервисов аутентификации

Находясь в консоли signer, наберите

svc/auth

Этот скрипт (смотри svc(8)) что файлы /keydb/keys и /keydb/signerkey существуют, и затем запускает программу keyfs(4), которая управляет файлом ключей. Она запрашивает пароль (ключевую фразу) которой вы хотите защитить свой файл ключей:

; svc/auth
Key:
Confirm key:

Приглашение появляется дважды для подтверждения. Если подтверждение успешно прошло, запускается сетевой сервис использующийся Inferno для аутентификации локальныйх и удаленных пользоватлей и хостов. (Если произошел сбой подтверждения, попробуйте снова заупстить svc/auth.)
Вы можете проверить что они запущены набрав:

ps

которая должна показать что-то вроде этого:

1 1 john release 74K Sh[$Sys]
3 2 john alt 15K Cs
10 9 john recv 25K Keyfs
11 9 john release 44K Styx[$Sys]
12 9 john recv 25K Keyfs
14 1 john alt 8K Listen
16 1 john release 8K Listen[$Sys]
18 1 john alt 9K Listen
20 1 john release 9K Listen[$Sys]
22 1 john alt 9K Listen
24 1 john release 9K Listen[$Sys]
26 1 john alt 8K Listen
28 1 john release 8K Listen[$Sys]
29 1 john ready 73K Ps[$Sys]

В списке должны присутствовать процессы Keyfs и Listen.

Шаг 10d: Ввод имен пользователей и секретных данных.

Для каждого пользователя проверяемого signer запустите

auth/changelogin username

У вас попросят набрать секрет (это может быть пароль или ключавая фраза) и дату истечения срока действия пароля. Эта дата будет использоваться как крайний срок действия сертификата выданного пользователю.
Changelogin (смотри changelogin(8)) получает доступ к пространству имен созданному keyfs(4), запущенному при старте svc/auth. Пользователь может позже изменить хранимый секрет при помощи команды passwd(1). Для signer генерирующего сертификат должна существовать хотя бы одна записть в файле паролей. Если на этом этапе вы не знаете имена пользователей которых вы хотите аутентифицировать, тогда создайте записи для пользователя inferno и для себя.

11. Создание безопасного соединения

Для установления безопасного соединения между двумя Inferno-машинами, каждая из них нуждается в публичном ключе с сертификатом подписанным общим signer. Мы сделаем два набора публичных/приватных ключей, один для сервера, другой для клиента (их разница только в том, что хранятся они в разных местах). Мы должны сделать это сначала для сервера, поскольку обычные сетевые сервисы требуют чтобы сервер хранил несколько ключей перед тем как они будут запущены. Затем мы запустим эти сервисы, и наконец отсортируем клиентов.

Шаг 11a: Запуск сервиса соединений
Сервер все еще нуждается в установлении связи с signer, так что нам надо запустить основной сервис соединений cs(8). Если вы воспользуетесь той же копией emu в которой вы запустили раньше svc/auth, вы можете пропустить этот шаг. Для проверки, вы может убедиться что появился новый файл cs в директории /net. Запустите команду

ls /net

Вы должны увидеть как минимум следующие имена в выводе:

net/cs
/net/ndb
/net/tcp
/net/udp

Иначе наберите:

ndb/cs

чтобы запустить cs(8). Попробуйте запустить команду "ls /net" снова чтобы проверить, что появился файл cs.

Шаг 11б. Генерация набора ключей для сервера

На машине-сервере (или в окне "сервера") воспользуйтесь командой getauthinfo(8) для получения сертификата и сохранения его в файле названном default, путем запуска:

getauthinfo default

Getauthinfo запросит адрес вашего signer (зачастую вы можете использовать имя хоста или даже localhost) и имя удаленного пользователя и пароль. Getauthinfo соединяется с сервисом inflogin машины-signer'а и аутентифицирет, в базе данных /keydb/keys, вас этими именем и паролем которые вы указали выше. Ответив yes на запрос о том, желаете ли вы записать сертификат в файл. Getauthinfo сохранит сертификат в файле /usr/user/keyring/default где user является тем же именем что и в /dev/user.

12. Сетевые сервисы

Как отмечалось раньше, в полной сети Inferno аутентификационные сервисы обычно запускаются на надежно защищенной машине, где запущен только сервис signer. Если для всех функций используется одна машина, вы можете достичь правильного эффекта запустив другую копию emu, чтобы выступать в роли Inferno хоста, а не signer. Он заупустит сервисы первичного файл-сервера и службу registry(4).
Команды описанные в svc(8) запускают процессы для различных сетевых сервисов. (Эти команды в действительности скрипты оболочки.) Как мы видели выше, svc/auth стартует службы на signer.
Теперь мы запустим обычный набор сервисов.

Шаг 12a: Запуск сетевых прослушивающих сервисов.

Наберите

svc/net

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

ps

которая должна вывести что-то вроде нижеследующего:

; ps
1 1 inferno release 74K Sh[$Sys]
7 6 inferno alt 15K Cs
13 1 inferno recv 15K Registry
14 1 inferno release 44K Styx[$Sys]
15 1 inferno recv 15K Registry
17 1 inferno alt 8K Listen
19 1 inferno release 8K Listen[$Sys]
22 1 inferno alt 8K Listen
24 1 inferno release 8K Listen[$Sys]
25 1 inferno ready 74K Ps[$Sys]

Должны быть запущено несколько процессов Listen и возможно Registry.
Вы также можете попробовать

netstat

Команда netstat печатает информацию о сетевых подключениях. Вы должны увидеть несколько строк, каждая из которых описывает объявление (announced FIXME) TCP и UDP сервисов.
В зависимости от сеттевой конфигурации вы можете увидеть что-то вроде этого:

tcp/1 Announced inferno 200.1.1.89!6668 ::!0
tcp/2 Announced inferno 200.1.1.89!6666 ::!0
tcp/3 Announced inferno 200.1.1.89!6675 ::!0

Каждая строка относится к сетевому соединению: имя соединения, имя пользователя запустившего сервер, адрес локального конца соединения, адрес удаленного конца соединения, и статус соеинения. Именем соединения в действительности является протоколом и соответствующий каталог в /net.
Адрес соединения представлен в виде host!port для этого сервиса основанного на IP, а удаленные адреса не заполнены потому что они все они представлены прослушивающими срвисами в состояниии Announced. В этом примере четыре строки показываютTCP сервис слушает на порту 6673. Просмотрев /lib/ndb/inferno при помощи grep (смотри grep(1)) увидим, что на порту 6675 прослушивает Inferno-сервис registry

grep 6675 /lib/ndb/inferno

выдает

tcp=registry port=6675 # default registry

Теперь сервер готов, но нам потребуется клиент. В любом случае нам потребуется третья машина или (скорее всего) просто запустим другую копию emu в новом окне. Запустим снова сервер соединений, набрав

ndb/cs

Сервер соединений основа сети Inferno. Когда сеть устанавливается, подпроцессы компонентов запускающие клиентов должен запустить cs перед стартом оконной системы. Заметьте, что если вы запускаете Inferno как сервер, или как комбинацию клиент и сервер, svc/net который стартует сетевые сервисы автоматически запустит cs, и вам не надо делать этого специально.

Шаг 12b: Генерация клиентского сертификата.

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

getauthinfo tcp!hostname

Используйте имя хоста текущей машины. Getauthinfo хранит сертификаты в файле /usr/user/keyring/keyname где имя пользователя соответствует имени в /dev/user и keyname это аргумент переданный getauthinfo. Еще раз, ответьте yes на вопрос в котором спрашивается хотите ли вы сохранить сертификат в файл.
Теперь когда ба и клиент и сервер имеют сертификаты полученные от одного signer, становится возможным установление соединения между ними. Обратите внимание, что получение ключей и сертификатов с помощью getauthinfo делается только один раз (или по одному разу на тот случай если не используется ключ по умолчанию.) Короче, вся работа завершена и не требуется ее повторять. После этого, предоставленные ключи записанные в файл keyring могут создать столько аутентифицированных соединений, сколько нужно пока сертификат не будет просрочен (это зависит от того когда была установлена дата истечения срока действия пароля). Так же обратите внимание на то, что разные машины могут иметь разные центры выдачи сертификатов, и каждый может использовать различные сертификаты для одной машины когда различаются имена удаленных пользователей (опция -f getauthinfo полезна в случае принудительного выбора соответствующего имени keyring).

Шаг 12c: Установление аутентифицированного соединения.

Скрипт svc/net запускает на сервере фундаментальный сервис имен и файловый сервис Styx. Он так же может быть запущен отдельно при помощи svc/styx. В любом случае пространство имен имен которое он будет обслуживать является тем же самым из которого был вызван скрипт. Теперь вы можете протестировать сервис.
Убедимся что каталог /n/remote пуст, набрав следующее

lc /n/remote

Вы можете примонтировать пространство имен сервера в каталог клиента /n/remote набрав

mount serveraddr /n/remote

Где serveraddr это IP адрес сервера или имя хоста которое может быть соотнесено с IP адресом сервера.
Теперь

lc /n/remote

должно выдать файлы и каталоги в пространстве имен облуживаемом сервером. Все эти файлы теперь также видны в пространестве имен вашего командного интерпретатора.
Мы должны отметить, что эти изменения оказывают влияние только на тот интерпретатор в котором вы выполнили команду mount, все остальные окна остаются без изменений. Вы можете создавать, удалять или изменять файлы и каталоги ниже /n/remote так, как вы могли бы поступить со своими файлами. Фактически, процессу не надо знать где в действительности расположен файл локально или уаленно. Вы можете размонтировать смонтированную директорию при помощи команды unmount. Выполните

unmount /n/remote

Вы можете убедиться что содержимое пропало запустив

ls /n/remote

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

Шаг 12d: Создание безопасного аутентифицированного соединения

Например,

mount -C sha1/rc4_256 serveraddr /n/remote

устанавливает аутентифицированное соединение с машиной заданной serveraddr, и запускает хэширование SHA1 с подписыванием сообщений (дайджестом), и 256-битное шифрование RC4. Эта команда монтирует пространство имен обслуживаемое на указанной машине serveraddr сервисом Styx, в локальный каталог Inferno /n/remote.

13. Добавление новых пользователей

Каждый процесс Inferno ассоциирован с именем определенного пользователя. Во время загрузки имя пользователя устанавливается в ваше login-имя основной ОС. Имя пользователя импользуется wm/logon для выбора домашнего каталога, и другими программами типа mount когда он ищет сертификаты. (Они так же имеют установленные права доступа основной ОС или нативно запущенной ОС Inferno.) Когда вы присоединяетесь к серверу другой системы, имя пользователя в аутентификационном сертификате берется удаленным файловым сервисом для установления соответствующего пользовательского имени.
Для создания нового пользователя, скопируйте каталог /usr/inferno в /usr/username. Если пользователь имеет доступ к сервисам сети, создайте запись на сервере аутентификации при помощи changelogin(8). Пользователь может изменить хранящийся секрет при помощи passwd(1), если пожелает. Когда пользователь залогинивается в первый раз, он должен сгенерировать пару публичный/приватный ключ при помощи getauthinfo(8). (При этом аутентификационный сервис должен быть уже где-то запущен.)
Программа оконного менеджера wm, wm/logon позволяет пользователю авторизоваться на локальной системе Inferno, как другой Inferno-пользователь (имя которого отличается от имени пользователя основной ОС). Ее использование показано дальше.

Шаг 13а: Перезапуск Inferno.

Теперь вы должны завершить выполнение всех запущенных копий emu которые у вас были. Самый быстрый способ - это нажать control-c в окне emu в котором вы запускали wm/wm. Запустите новый emu как и прежде

emu

или выбрав соответствующий пункт из меню запуска Windows-машины. Самое время запустить сетевые сервисы

svc/net

а затем запустите

wm/wm wm/logon

и войдите под именем inferno. Программа wm/login автоматически сменит рабочий каталог на /usr/inferno и запишет строку "inferno" в /dev/user. Если файл /usr/inferno/namespace существует, он будет использован для создания нового пространства имен на основе команд, прописанных в нем (смотрите newns(2)).

14. Что дальше

Теперь у вас есть полностью настроенная система Inferno. Вам понадобится мышь с тремя кнопками чтобы пользоваться acme, wm и плюмбингом.
Чтобы узнать больше обратитесь к следующим справочным руководствам: intro(1), emu(1), wm(1), wm-misc(1), sh(1), acme(1) и limbo(1).

Переведено на Нотабеноиде
http://notabenoid.org/book/2346/7853

Переводчики: j1m, rapidfx, dzenb

Настройки

Готово:

100.00% КП = 1.0