Капсула Никиты Попова


Установка Plan 9

[UPD: ]
Базовая установка и настройка файлового сервера и сервера авторизации

Ввиду своей довольно уникальной архитектуры и используемых подходов установка Plan 9 [а именно 9front] может вызвать множество вопросов даже у опытного системного администратора. Большая часть этой статьи будет представлять из себя переработанную информацию из справки на сайте проекта1. Справка не раскрывает некоторые тонкие моменты, поэтому я постараюсь дополнить её своим опытом. В процессе я буду использовать виртуальную машину KVM.

Подготовка

– Не хватай его сразу. Не хватай его сразу, Урри. Выясни сначала как он управляется. Выясни как он управляется сначала.

– Не понял, повторите!

– Узнай где у него кнопка!

Перед началом вы должны ответить на несколько вопросов:

  • Какую конфигурацию имеет ваша локальная сеть?
  • Какое оборудование установленно в вашей машине и поддерживается ли оно в ОС? [список поддерживаемого оборудования доступен на сайте проекта2]
  • Какое имя будет у машины и вашего пользователя?

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

Для начала скачайте подходящий вам установочный ISO образ системы с сайта проекта3 и создайте загрузочную флешку. Если вы выбрали для первой попытки установку на виртуальную машину [что я вам и советую], то просто примонтируйте к ВМ образ диска и начните закрузку. Если всё было сделано правильно вы увидите процесс загрузки.

Первая загрузка

Также в процессе первой загрузки вам будут заданы несколько вопросов. В большинстве можно остановиться на значениях по умолчанию [обычно указаны в квадратных скобках], если они доступны.

Пользователь

 user[glenda]:

Предлагаемый пользователь по умолчанию - glenda. Запуск системы на этой машине будет происходить под этим пользователем. Такой пользователь в контексте Plan 9 зовётся hostowner (владелец хоста). Концепция корневого пользователя root была упразднена по причинам проблем с безопасностью. Владелец хоста имеет высокие полномочия на конкретной машине, но ограничен в доступе к файлам других пользователей. Для первой установки лучше его не менять. Просто нажимаем Enter.

vgasize, monitor, mouseport

Следующими вопросами будут запрошены данные о дисплее и мыши:

vgasize is (text, 640x480x8, 1024x768x16, ...) [1024x768x16]
monitor is (vesa, xga, lcd, ...) [vesa]
mouseport is (ps2, ps2intellimouse, 0, 1, 2) [ps2]

На основании ответов будут установлены переменные окружения $vgasize, $monitor и $mouseport. Эти значения также будут записаны в файл plan9.ini, из которого будут использоваться при последующий загрузках.

  • monitor - в любое значение, кроме vesa будет пропускать эмуляцию VESA BIOS и будет выполнятся попытка использования нативного драйвера VGA для видео карты. Список поддерживаемых системой дисплеев и видео карт может быть найден в файле /lib/vgadb. Дополнительную информацию вы можете найти на страницах справки vga(3), vga(8) и vgadb(6).
  • vgasize - используется для хранения разрешения и разрядности дисплея. Тут можете прописать любое значение, поддерживаемое вашим дисплеем.
  • mouseport - Значение по умолчанию для ps2 должно подходить в большинстве случаев. При установке на ноутбук или при использовании мыши с колесом прокрутки может понадобиться выставить его в ps2intellimouse.

После завершения загрузки вы можете изменить установленные значения в файле plan9.ini.

Пример содержимого plan9.ini:

monitor=vesa
vgasize=1024x768x16
mouseport=ps2intellimouse

Завершение первой загрузки

Запуск

После ответов на вопросы процесс загрузки попробует запустить стандартный графический мультиплексор rio, приветствующий вас серым рабочим столом с запущеным монитором нагрузки stats и окном с оболочкой rc.

rio
Безупречная серость.

Имейте ввиду, что если пользователь был изменён, то вы увидите просто серый экран. Инициализация подготовлена только для пользователя glenda. В остальных случаях система остаётся чистой.

Немного об управлении

Для управления мультиплексером rio используется трёхкнопочная мышь.

  • ЛКМ - указание фокуса и выделение, ничего особенного;
  • СКМ - контекстное меню, которое будет различаться для разных приложений;
  • ПКМ - меню rio, позволяет создавать, изменять и удалять окна.

Приложения запускаются в окнах rio. Но самое интересно, что в окне rio может быть запущен … rio. И ещё. И ещё.

При работе с flash-накопителя для первого знакомства этого может быть достаточно. Система будет созранять своё состояние как обычный live-образ любой другой ОС. Так что вы можете перейти к следующим статьям цикла.

Если же вы достаточно исследовали live-образ Plan 9 и чувствуете, что готовы к построению полноценной вычислительной сети [в контексте Plan 9 используется термин grid] - то мы продолжаем.

Установка базовой системы

Установка выполняется rc-сценарием /rc/bin/inst. Чтобы начать установку выполните в терминале команду inst/start.

term% inst/start

Следуйте инструкциям, чтобы завершить установку, при необходимости выбрав значения по умолчанию.

Каждый шаг может быть пройден повторно путём ввода его имени в запросе.

Запуск сценария inst/start

Теперь перейдём к шагам установки.

configfs

Файловая система cwfs64x использует постоянное и временное хранилища на разных разделах. Файловая система hjfs более однородна, но работает медленнее. Если ваш диск менее 12 ГиБ, то вам необходимо выбрать hjfs. В этом примере мы продолжим используя cwfs64x.

You can install the following types of systems:
    cwfs64x     the cached-worm file server
    hjfs        the new 9front file server (experimental!)
File system (cwfs64x, hjfs)[cwfs64x]:

configfs

partdisk

На этом шаге нам необходимо создать разделы. Сценарий установки сообщит вам какие диски он смог обнаружить.

Выбираем тот, что не эмуляция оптического диска и жмём Enter.

The following disk devices were found.

sdC0 - QEMU DVD-ROM
    empty                  0 3916        (3916 cylinders, 29.99 GB)
  * p1

sdF0 -

Disk to partition (sdC0, sdD0)[no default]: sdF0
The disk you selected HAS NO master boot record on its first sector.
(Perhaps it is a completely blank disk.)
Shall we create a blank EFI partition table (GPT)
or install traditional DOS partition table (MBR)?

Диск у нас пустой, так что создадим свежую MBR таблицу.

Install mbr or gpt (mbr, gpt)[no default]: mbr

This is disk/fdisk; use it to create a Plan 9 partition.
If there is enough room, a Plan 9 partition will be
suggested; you can probably just type ’w’ and then ’q’.

cylinder = 8225280 bytes

В этом примере мы будем использовать весь диск. Просто записываем предложенные изменения.

>>> w
>>> q

partdisk

prepdisk

Из-за особенностей CWFS нам необходимо выполнить дополнительное разбиения раздела на подразделы.

The following Plan 9 disk partitions were found.

/dev/sdF0/plan9
  empty                  0 62910477    (62910477 sectors, 29.99 GB)

Plan 9 partition to subdivide (/dev/sdC0/plan9)[no default]:
Use the Plan 9 partition created in the previous step. Type /dev/sdC0/plan9 and hit enter.
This is disk/prep; use it to subdivide the Plan 9 partition.
If it is not yet subdivided, a sensible layout will be suggested;
you can probably just type `w` and then `q`.

no plan9 partition table found
9fat 204800
nvram 1
other 8957953
fscache 8957953
fsworm 44789770
>>>

И снова принимаем значения по умолчанию.

>>> w
>>> q

prepdisk

mountfs

Теперь, когда подразделы созданы, мы указываем как их монтировать и форматируем их. Если предыдущие шаги прошли без проблем, то сценарий установки обнаружит созданные нами разделы самостоятельно. Просто нажимаем Enter на каждом из вопросов.

The please choose your cwfs64x partitions

--rw-r----- S 0 glenda glenda 4586471936 Jul  4 13:28 /dev/sdC0/fscache

Cwfs cache partition (/dev/sdC0/fscache)[/dev/sdC0/fscache]:
--rw-r----- S 0 glenda glenda 22932362240 Jul  4 13:28 /dev/sdC0/fsworm

Cwfs worm partition (/dev/sdC0/fsworm)[/dev/sdC0/fsworm]:
--rw-r----- S 0 glenda glenda 4586471936 Jul  4 13:28 /dev/sdC0/other

Cwfs other partition (/dev/sdC0/other)[/dev/sdC0/other]:

Далее нам будет предложено форматировать (ream) раздел, соглашаемся.

Since this is a fresh install, we choose yes to ream (format) the file system:
Ream the file system? (yes, no)[no]: yes
Starting cwfs64x file server for /dev/sdC0/fscache
Reaming file system
bad nvram key
bad authentication id
bad authentication domain
nvrcheck: can’t read nvram
config: config: config: auth is now disabled
config: config: config: config: config: config: current fs is "main"
cmd_users: cannot access /adm/users
63-bit cwfs as of Wed Jul  4 00:59:30 2012
    last boot Tue Jul 17 13:34:57 2012
Configuering cwfs64x file server for /dev/sdC0/fscache
Mounting cwfs64x file server for /dev/sdC0/fscache
% mount -c /srv/cwfs /n/newfs
Mounting cwfs64x file server for /dev/sdC0/other
% mount -c /srv/cwfs /n/other other

mountfs

confignet

Пришло время сконфигурировать сеть.

We will configure the ethernet.

Please choose a method for configuring your ethernet connection.

    manual - specify IP address, network mask, gateway IP address
    automatic - use DHCP and SLAAC to automatically configure

Configuration method (manual, automatic)[automatic]:

confignet

автоматическое

В этом примере я остановлюсь на автоматической конфигурации, так как у меня настроен DHCP. Если вы также будете использовать DHCP, то не забудьте зарезервировать адрес на сервере.

Нажмите Enter, чтобы перейти к следующему шагу.

ручная

Ручная настройка не представляет сложности. Необходимо просто указать IP адрес, маску сети, шлюз и DNS сервер.

Configuration method (manual, automatic)[automatic]: manual
ip address [no default]: 192.168.2.10
network mask [no default]: 255.255.255.0
gateway address [no default]: 192.168.2.1
dns server [192.168.2.1]:
starting ethernet manual config

mountdist

Укажем сценарию установки где ему искать файлы для установки.

Please wait... Scanning storage devices...
    /dev/sdC0/9fat
    /dev/sdC0/data
    /dev/sdC0/fscache
    /dev/sdC0/fsworm
    /dev/sdC0/other
    /dev/sdD0/data

The following storage media were detected.
Choose the one containing the distribution.

    /dev/sdD0/data (iso9660 cdrom)

Distribution disk (/dev/sdD0/data, /dev/sdC0/fscache, /)[/]:

Образ CD уже примонтирован в корень, просто укажем / и жмём Enter.

% mount /srv/boot /n/distmedia

Which directory contains the distribution?

Location of archives [/]:

И снова, корень CD уже в корне системы, также укажем / и жмём Enter.

mountdist

copydist

На этом шаге будет производиться копирование файлов дистрибутива системы на сконфигурированные разделы. Сценарий не отображает прогресс установки. Следить за процессом можно лишь отслеживая нагрузку на мониторе stats(8). Процесс занимает от 5 минут до часа в зависимости от скорости работы вашего диска.

Прогресс copydist

По завершении вы должны увидеть следующее сообщение:

Завершение copydist

Оно означает, что файлы системы успешно скопированы на целевые разделы.

ndbsetup

Дадим нашему хосту имя. По умолчанию будет назначено cirno.

Setup network configuration

sysname [cirno]: test-fs

ndbsetup

tzsetup

Настраиваем часовой пояс.

Setup Time Zone

Time Zone (Argentina, Australia_ACT, Australia_Broken-Hill,
Australia_LHI, Australia_NSW, Australia_North, Australia_Queensland,
Australia_South, Australia_Sturt, Australia_Tasmania,
Australia_Victoria, Australia_West, Australia_Yancowinna, Brazil_Acre,
Brazil_DeNoronha, Brazil_East, Brazil_West, CET, Canada_Atlantic,
Canada_Central, Canada_East-Saskatchewan, Canada_Eastern,
Canada_Mountain, Canada_Newfoundland, Canada_Pacific, Canada_Yukon,
Chile_Continental, Chile_EasterIsland, Cuba, EET, Egypt, GB-Eire, GMT,
HST, Hongkong, Iceland, Iran, Israel, Jamaica, Japan, Libya,
Mexico_BajaNorte, Mexico_BajaSur, Mexico_General, NZ, NZ_CHAT, Navajo,
PRC, Poland, ROC, ROK, Singapore, Turkey, US_Alaska, US_Arizona,
US_Central, US_East-Indiana, US_Eastern, US_Hawaii, US_Michigan,
US_Mountain, US_Pacific, US_Yukon, W-SU, WET)[US_Eastern]: GMT

Вводим наиболее подходящий нам из списка и жмём Enter.

tzsetup

bootsetup

Настройка загрузки системы.

Setup Plan 9 FAT boot partition (9fat)

Plan 9 FAT partition (/dev/sdC0/9fat)[/dev/sdC0/9fat]:

Принимаем значение раздела загрузки по умолчанию.

Все переменные окружения, указанные при первом запуске, сейчас будут сохранены в /n/9fat/plan9.ini. Также ядро системы будет скопировано в раздел 9fat.

dossrv: serving /srv/dos
Initializing Plan 9 FAT partition.

% disk/format -r 2 -d -b /386/pbs /dev/sdC0/9fat
Initializing FAT file system
type hard, 12 tracks, 255 heads, 63 sectors/track, 512 bytes/sec
used 4096 bytes
% mount -c /srv/dos /n/9fat /dev/sdC0/9fat
% rm -f /n/9fat/9bootfat /n/9fat/plan9.ini /n/9fat/9pc
% cp /n/newfs/386/9bootfat /n/9fat/9bootfat
% chmod +al /n/9fat/9bootfat
% cp /tmp/plan9.ini /n/9fat/plan9.ini
% cp /n/newfs/386/9pc /n/9fat/9pc

If you use the Windows NT/2000/XP master boot record
or a master boot record from a Unix clone (e.g., LILO or
FreeBSD bootmgr), it is probably safe to continue using
that boot record rather than install the Plan 9 boot record.

Так как в нашем случае нет соседней системы мы выбираем запись Plan 9 в главную загрузочную область и помечаем раздел активным.

Install the Plan 9 master boot record (yes, no)[no default]: yes
Mark the Plan 9 partition active (yes, no)[no default]: yes

The Plan 9 partition is now marked as active.

bootsetup

finish

Последний шаг отключит образ CD и завершит работу. Подтверждаем нажатием клавиши Enter для перезагрузки компьютера.

Ваша первая установка 9front завершена.

Поздравляю!

Настройка сервера авторизации и файлового сервера

Основано на этом примере - youtube.

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

Авторизация будет выполнять проверку паролей, а файловая система будет следить за тем, чтобы у пользователей был доступ к нужным файлам. Первое, что необходимо сделать, это установить владельца хоста для системы. Разработчики Plan 9 отказались от использования корневого пользователя root, поскольку это было связано с очевидными проблемами безопасности. Вместо этого у каждой системы есть назначенный владелец хоста (host owner). Владелец хоста обладает неограниченной властью над любыми процессами, выполняемыми в системе, которой он владеет. Таким образом, владелец хоста может отключить процессы и получить доступ практически ко всему оборудованию.

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

Настройка NVRAM

Мы уже видели раздел NVRAM ранее, это небольшая часть хранилища, называемая Энергонезависимой оперативной памятью (Non-Volatile RAM) по историческим причинам, и она содержит токен пароля для владельца хоста. Это позволяет системе загружаться с авторизацией без необходимости вводить пароль в командной строке загрузки. Чтобы убедиться, что система использует его, я добавлю его в plan9.ini. Некоторые системы делают это автоматически, но я просто хочу быть уверенным.

Итак, давайте смонтируем раздел 9fat.

% 9fs 9fat
% sam /n/9fat/plan9.ini

Здесь мы можем указать, откуда взять раздел NVRAM, и это также может быть задано в виде файла.

bootfile=9pc64
nvram=/dev/sdF0/nvram
bootargs=local!/dev/sdF0/fscache
mouseport=ps2
monitor=vesa
vgasize=1024x768x16

tiltscreen=none

И теперь мы перезагрузим систему, чтобы это вступило в силу.

% fshalt -r

Запись в NVRAM

Теперь мы перезагрузили систему с указанным разделом NVRAM, и следующим шагом будет запись в него.

  • authid - будет указывать владельца хоста, которым будет glenda.
  • authdom - в данном случае запрашивается доменное имя. Если вы используете доменное имя, просто укажите его. Если нет - укажите что-нибудь в качестве заглушки.
  • secstore key - используется для другой системы авторизации, и я пока не буду его использовать. Нажмите Enter и оставьте поле пустым.
  • password - пароль для пользователя glenda.
% auth/wrkey
authid: glenda
authdom: testdom
secstore key:
password:

Вот и все.

Добавление пользователей в авторизацию

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

% auth/keyfs

Итак, мы начнём с пользователя glenda:

  • Password - введите тот же пароль;
  • Confirm password - и ещё раз;
  • assign new Inferno/POP secret? [y/n]: n - пока не важно, просто установите значение “нет”;
  • Expiration date (YYYYMMDD or never)[never]: не будем беспокоиться о сроке истечения, установите значение “никогда”;
  • Post id:, User's full name:, Department #:, User's email address:, Sponsor's email address: - это если у вас в офисе полно людей.
% auth/changeuser glenda
Password:
Confirm password:
assign new Inferno/POP secret? [y/n]: n
Expiration date (YYYYMMDD or never)[never]:
Post id:
User's full name:
Department #:
User's email address:
Sponsor's email address:
user glenda installed for Plan 9

Вот так-то. glenda теперь добавлена как пользователь. И я добавлю обычного пользователя testuser. В основном параметры все те же.

% auth/changeuser testuser
Password:
Confirm password:
assign new Inferno/POP secret? [y/n]: n
Expiration date (YYYYMMDD or never)[never]:
Post id:
User's full name:
Department #:
User's email address:
Sponsor's email address:
user testuser installed for Plan 9

Добавление пользователей в файловую систему

Следующим шагом будет добавление нашего нового testuser в файловую систему. Пользователь glenda автоматически был указан в качестве одного из пользователей файловой системы при выполнении базовой установки. И теперь нам нужно добавить testuser, чтобы он также мог владеть файлами. Для этого нам нужно отправить команду на командный сервер файловой системы.

% echo newuser testuser >>/srv/cwfs.cmd

Итак, теперь новый пользователь testuser добавлен в файловую систему CWFS.

Настройка сетевой базы данных

Следующий шаг - отредактировать файл сетевой базы данных, чтобы назначить эту систему в качестве сервера аутентификации и файлового сервера. Этот файл находится в /lib/ndb/local.

Внизу файла у нас есть пример, который мы можем использовать:

# example: adjust to fit your network
#auth=cirno authdom=9front
#ipnet=9front ip=192.168.0.0 ipmask=255.255.255.0
#	ipgw=192.168.0.1
#	dns=192.168.0.1
#	auth=cirno
#	dnsdom=9front
#	cpu=cirno
#	smtp=cirno

Так что нам просто нужно сделать нашу версию этой записи:

auth=test-fs authdom=testdom
ipnet=testdom ip=192.168.2.0 ipmask=255.255.255.0
	ipgw=192.168.2.1
	dns=192.168.2.1
	auth=test-fs
	fs=test-fs
	dnsdom=testdom

Редактирование plan9.ini

Теперь нам нужно добавить еще изменений в plan9.ini. Из-за особенностей с CWFS нам нужно внести две правки.

  • Во-первых, нужно скопировать файл plan9.ini, чтобы загрузить систему в режиме настройки и убедиться, что авторизация в файловой системе работает;
  • И нам также нужна окончательная конфигурация plan9.ini, чтобы сервер загружался нормально, без необходимости взаимодействия.

Итак, давайте снова смонтируем 9fat и сделаем копию текущего plan9.ini и еще одного, который мы будем использовать позже.

9fs 9fat
cp /n/9fat/plan9.ini /n/9fat/plan9.bak.ini
cp /n/9fat/plan9.ini /n/9fat/plan9.new.ini

Для существующего файла первое, что нам нужно сделать, это изменить его с терминала по умолчанию на CPU сервер. А затем к параметрам загрузки мы добавим параметр -c для диска для файловой системы, и это переведет его в режим настройки.

bootfile=9pc64
nvram=/dev/sdF0/nvram
service=cpu
bootargs=local!/dev/sdF0/fscache -c
mouseport=ps2
monitor=vesa
vgasize=1024x768x16

tiltscreen=none

Для нового файла мы добавим опцию -a tcp!*!564 в параметры диска. Это сообщит системе, что она прослушивает TCP порт 564 для получения команд для подключения к файловой системе. Это также будет CPU сервер, и мы изменим параметры загрузки на nobootprompt, чтобы он не просил нас нажимать Enter.

bootfile=9pc64
nvram=/dev/sdF0/nvram
service=cpu
nobootprompt=local!/dev/sdF0/fscache -a tcp!*!564
mouseport=ps2
monitor=vesa
vgasize=1024x768x16

tiltscreen=none

Итак, мы подготовили оба файла сейчас, потому что после перезагрузки системы графика будет отключена, поэтому не будет работать rio, и мы не сможем редактировать файлы с помощью acme или sam. Вы можете использовать ed, но проще подготовить их сейчас и использовать просто mv, чтобы переименовать их позже.

Загрузка в роли сервера

Итак, мы перезагрузили систему, и вы можете видеть, что она ждет, когда я введу значение по умолчанию, которое имеет символ -c.

bootargs is (tcp, tls, il, local!device)[local!/dev/sdF0/fscache -c]

Нажмите Enter.

Далее появляется ввод config. На этом этапе нам нужно ввести noauth. Система сообщит, что авторизация отключена.

Я снова наберу noauth, и авторизация теперь включена. Затем введите end и продолжайте загрузку системы.

config: noauth
auth disabled
config: noauth
auth enabled
config: end

Как вы можете видеть, rio не запущен. Это просто приглашение командной строки.

Мы смонтируем раздел 9fat и переместим файл plan9.ini с параметром конфигурации. А затем переместите наш новый файл plan9.ini и перезагрузите систему еще раз.

# 9fs 9fat
# cd /n/9fat/
# mv plan9.ini plan9.config.ini
# mv plan9.new.ini plan9.ini
# fshalt -r

Теперь вы можете выключить систему, а затем отключить монитор, клавиатуру и мышь и загрузить ее обратно.

Она будет спокойно работать и ждать запросов к файловому серверу.

Подключение

Теперь вам нужен drawterm4 в вашей основной системе для подключения к файловому серверу.

drawterm -h 192.168.2.10 -u testuser -a 192.168.2.10

Введите пароль пользователя и вуаля! Теперь вы подключены к файловому серверу. Вы также можете получить доступ к файлам вашего локального компьютера в /mnt/term. Это довольно полезно, вы можете написать какое-нибудь программное обеспечение в своем обычном текстовом редакторе и протестировать его в среде Plan 9 без копирования каких-либо файлов.

На этом настройка фалового сервера с авторизацией завершена.

В последующих статьях мы подробней остановимся на применении Plan 9, работе в среде и расширении нашей сети.