В данных статьях будут рассмотрены некоторые вопросы, не освященные в доступных материалах и результаты личного опыта работы с Plan9/9front.
Подразумевается, что установка и работа происходит в среде Linux, для установки использован наиболее разработанный форк 9front (релиз от 31.10.2022), а сама установки производится на виртуальную машину под управлением LibVirt. Под Plan9 всегда подразумевается ее форк 9front, если явно не оговорено обратное.
Troubleshooting
Этот раздел должен быть именно в этом месте, в самом начале, т.к. проблемы и ошибки начнутся сразу. Однако чтобы не загромождать текст, по факту раздел вынесен в отдельную статью.
С чем придется столкнуться
Необходимо сразу оговорить тот факт, что Plan9 не является операционной системой для каждодневного пользования и работы в ней, не годится в качестве продакшн-решения. Она представляет скорее академический интерес для людей, интересующихся архитектурой операционных систем. Оригинальная Plan9 разрабатывалась до начала-середины 90-х г.г. и затем была заморожена. Поэтому оригинальная Plan9 сейчас интереса не представляет - в ней может отсутствовать поддержка современного оборудования и не предоставляются никакие гарантии, техподдержка итп. Из различных форков на данный момент живым и стремительно разрабатываемым является 9front. Разработчики провели большую работу по расширению поддержки оборудования, дополнили новыми утилитами и сервисами.
Система обладает достаточно экзотической, непривычной концепцией пользовательского интерфейса и отличающейся от Linux архитектурой. К этому надо привыкнуть и немного потренироваться. Также, надо отдавать себе отчет в том, что Plan9 не является Unix-подобной ОС, хотя во многом она похожа на привычный Linux и содержит в себе многие концепции, реализованные в Unix-системах.
Стандартный шелл rc отличается от bash, консоль непривычна и неудобна. Автозавершение по комбинации Ctrl+F
, курсор консоли может находиться в любом месте и запуская команду надо следить, чтобы курсор находился у последнего приглашения командной строки (Ctrl+B
возвращает курсор на место).
По системе весьма мало документации, а многая из имеющейся уже устарела и возможно, нерабочая. Многие ресурсы уже не существуют, так что придется пользоваться сервисом archive.org. Подавляющее большинство материалов на английском языке. Система снабжена стандартной документацией (manpages и какие-то непонятные несистематизированные документы в /lib), которая однако весьма лаконична и скромна. Без навыков системного администрирования и программирования решать проблемы окажется весьма сложно.
Намереваясь ставить систему на реальное железо надо быть готовым к тому, что ассортимент поддерживаемого железа весьма скуден, а то что поддерживается, может работать нестабильно или неправильно. Сначала надо выяснить точные модели компонентов (сетевые карты, диски, видеокарты, звуковые карты, мосты итд) и свериться с перечнем поддерживаемого оборудования на сайте 9front. Для некоторых поддерживаемых устройств необходимо стороннее firmware которое не входит в поставку 9front. Его придется найти, скачать и разместить в /lib/firmware после чего перекомпилировать ядро.
Практические рекомендации
Не имея достаточного уровня знакомства с системой, на первых порах лучше воспользоваться виртуализацией. А для самого-самого первого знакомства хватит и live-CD режима, который предоставляет установочный диск. Установка на реальное железо сопряжена с рядом сложностей - далеко не всякое оборудование поддерживается системой, ликвидация последствий ошибок и поломок на порядок сложнее и требует наличия некоторого начального опыта и знания системы.
Удобно иметь сразу две и более установленных на виртуалки системы. В этом случае дополнительные виртуалки можно использовать в качестве "черновика", для тренировки, проб и возможности посмотреть изначальное состояние системы, если что-то пойдет не так.
Важно не забывать про бекапы, в случае Plan9 это особенно актуально. Перед правкой конфигов желательно сохранить их в исходном виде под другим именем, чтоб потом можно было относительно просто вернуть изменения назад. Особенно это касается загрузочных файлов: /rc/bin/cpurc, /rc/bin/termrc, $home/lib/profile и plan9.ini из загрузочного раздела. Модифицировав в редакторе конфиги, перед перезагрузкой обязательно сначала закройте файл - даже сохраненный файл, остающийся открытым в процессе перезагрузки может повредиться. Средства виртуализации предоставляют возможность делать снапшоты системы. Полезно периодически сохранять успешную работающую конфигурацию, особенно перед внесением изменений в загрузочные скрипты или настройки сети.
В процессе настроек и изменений не лишним также будет конспектировать ход работы - вкратце описывая суть и ход изменений, источники информации итп. По прошествии времени такая информация может оказаться очень полезной и сэкономить массу сил и времени.
Хотя Plan9 имеет все необходимые штатные средства для разработки, администрирования и пр. задач, в ряде случаев пользоваться ими может оказаться неудобным или медленным. В таких случаях можно вынести участок работы на внешнюю машину подмонтировав в систему ее раздел. К примеру процесс работы с кодом был реализован подобным образом. Участок редактируемого кода скопирован из /sys/src на внешнюю машину в каталог, доступный для Plan9. Там производилась вся работа с кодом (чтение, поиск, правка итд) привычными средствами и методами. Затем для компиляции в Plan9 открываем консоль, переходим в этот подмонтированный каталог и запускаем mk install
- сборка происходит как положено, без необходимости настройки средств кросс-компилляции.
Также на внешнюю машину можно выносить содержимое с большим объемом. К примеру, для сайта в его каталог можно примонтировать каталог, расположенный на внешней машине. Проблемы есть только если каталог монтируется по NFS в Plan9 он древний и урезанный, расшаренные каталоги подключает только в режиме чтения, но для статического контента годится.
Полезно иметь в наличии PXE-сервер для загрузки по сети операционных систем и различных системных утилит. Если таковой имеется, можно легко настроить и загрузку образа 9front указав в конфигурации новый пункт меню:
KERNEL memdisk
APPEND iso
INITRD images/plan9/9front.iso
расположив скачанный и распакованный образ диска в доступном PXE-серверу месте. Можно указать и полный путь. Для удобства имя образа желательно сократить. Такой вариант загрузки прост и приемлем - образ весит порядка 200Мб, по сети грузится недолго и памяти займет немного. С такого диска удобно устанавливать систему на любое устройство, подключенное к локальной сети, а также дает возможность добраться до системы в случае неполадок. LiveCD-образ также удобен для быстрой и безопасной оценки оборудования на предмет того, есть ли смысл ставить систему именно на это железо, все ли его компоненты поддерживаются и работают с системой.
Установка
Установка системы происходит достаточно тривиально. Скачав и распаковав установочный образ, создаем в LibVirt виртуальную машину, подключаем образ и выставляем загрузку ВМ с него. Далее процесс хорошо описан на сайте разработчиков 9front. Поэтому повторяться смысла нет. В данном разделе описаны некоторые уточняющие моменты и дополнения, практические приемы.
При создании образа виртуалки рекомендуется не жадничать и задать сразу большой размер раздела. Если потом на имеющемся диске станет тесно и возникнет вопрос о расширении раздела, то вопрос этот в случае файловых систем Plan9 сложный - ФС не понимает что раздел стал больше и оперирует старым размером. В качестве решения можно создать другой диск с чистым разделом и затем командой dd скопировать в него содержимое исходного раздела. Но это дополнительные проблемы и гарантий успеха нет, поэтому лучше позаботиться о размере раздела заблаговременно.
Как показала практика, система нестабильно работает с UEFI, поэтому рекомендуется при возможности его избежать и при инсталляции указать установку mbr и активного раздела.
В случае реального железа, на диске наверняка будет присутствовать разделы. Если диск полностью отдается под Plan9 то его желательно полностью обнулить. Сразу после загрузки системы с образа определяемся какое из устройств является целевым диском:
cat /dev/sdE0/ctl
На целевом диске сносим разделы:
disk/fdisk /dev/sdE0/data
далее вводим команды d p1
, d p2
итд для всех разделов, затем сохраняем: w
и выходим: q
. Если диск был размечен как gpt, то команда об этом скажет и надо запускать disk/edisk, далее по аналогии. Если планируется устанавливать mbr, надо убрать разметку gpt занулением начала диска:
dd -if /dev/zero -of /dev/sdE0/data -bs 512 -count 34
Будет достаточно лишь этой команды, конец диска разметчик диска не проверяет считая его чистым. После этого можно запускать инсталляцию: inst/start
.
В процессе выполнения inst/start
при необходимости повторить этап установки, его можно ввести вручную. Прервать установку можно введя !rc
, затем повторной командой inst/start
запустить установку снова.