Как я уже неоднократно говорил в предыдущих заметках, OpenSolaris — это вовсе не очередной дистрибутив Linux'а, и даже не следующая по счету BSD-система. Не сказать, что здесь "все не так, ребята" — но и рассчитывать на понимание системы, основываясь на ранее нажитом богачестве знаний, тоже не следует. И это надо четко уяснить до того, как предпринимать какие-либо действия, вредоносные последствия которых будут, возможно, не совсем уж необратимыми, но на их ликвидацию уйдет уйма сил и времени. Особенно существенными, если четкого понимания глубинной сути действий еще нет. А суть многих, казалось бы, обыденных для любой из тех ОС, с которыми мы сталкивались ранее, действий — во многом иная. Что мы скоро увидим на примере банального обновления системы.
Многоскорбный повествователь настоящих заметок не может пока, положа руку на сердце, сказать, что он глубоко проник в суть происходящих в OpenSolaris явлений. Однако за некоторое время общения с этой системой сделал некоторые наблюдения, которыми и хотел бы поделиться с читателями, дабы предостеречь их от весьма тривиальных ошибок.
На мой взгляд, тремя основополагающими понятиями в OpenSolaris являются: образ (Image), стартовая среда (или, как она названа в русском переводе Руководства по быстрому введению в OpenSolaris, среда загрузки — Boot Environment) и роли (Role). Ни одно из них не имеет аналогов ни в одном Linux'е или BSD, а первые два, насколько я понял, еще не инкорпорированы и в собственно Solaris.
Начнем с первого. Все, что установлено в системе, рассматривается как образы. Образ — это и сама работающая система, и отдельные программные комплексы, связанные между собой зависимостями, и единичные пакеты. Образ можно определить как комплекс взаимосвязанных файлов, каталогов, жестких и символических ссылок и зависимостей. С помощью специального инструментария они сливаются воедино в определенном формате. Образы могут быть
- полными, представляющими собой завершенную систему,
- частичными — наборами, связанными с родительским образом полной системы, и
- пользовательскими — отдельными пакетами, пригодными к автономному перемещению и установке.
Всеми образами управляет IPS (Image Packaging System — Система Упаковки Образов). С помощью специальных инструментов командной строки (команда pkg с рядом субкоманд, по своему поведению похожая на утилиты семейства apt из deb based дистрибутивов Linux'а) или графических фронт-эндов к ним (упоминавшихся ранее Диспетчера обновлений и Диспетчера пакетов) она позволяет создавать образы отдельных пакетов добавлять их к образу системы или удалять их из образа, а также выполнять тотальное обновление образа системы.
Следует подчеркнуть, что IPS является специфическим элементом именно OpenSolaris, разработанным при деятельном участии Яна Мёрдока, создавшего некогда дистрибутив Debian и придумавшего формат deb-пакетов. Поэтому родовые черты сходства между инструментами той и другой систем бросаются в глаза. Хотя внутренне IPS очень далеко отошла от традиционной концепции пакетов, существующей во всех Unix-подобных системах издревле. И тут напрашивается аналогия со столь же радикальной системой PBI из PC-BSD — хотя сходства между ними нет ни в чем, кроме радикализма.
Насколько я знаю, IPS еще не инкорпорирована в собственно ОС Solaris. Там применяются пакеты традиционного для UNIX формата SVR4, для работы с которыми служит столь же консервативное семейство утилит pkgadm — pkgadd, pkgrm и так далее, не только по названию, но и по действию сходное с утилитами группы pkg_add из Slackware или FreeBSD. Эти же утилиты существуют и в OpenSolaris. В последней, наряду с "родными пакетами могут использоваться и пакеты в формате SVR4 (в частности, именно в нем хранятся пакеты в репозиториях Blastwave и SunFreeware). Причем для их установки нет необходимости прибегать к утилитам pkgadm — с этой задачей прекрасно справляется Диспетчер пакетов IPS. Впрочем, до изучения пакетов SVR4 я ещё не добрался — и не уверен, доберусь ли: как я отмечал ранее, это совершенно особая история, требующая осторожного подхода ввиду возможного конфликта зависимостей.
Тотальное обновление образа системы может сопровождаться созданием нового образа или модификацией существующего, причем первый вариант принят по умолчанию при выполнении этой процедуры через графический интерфейс Диспетчера обновлений. Аналогично и добавление новых пакетов может происходить как к существующему образу, так и приводить к созданию образа нового; тут при использовании графического интерфейса Диспетчера пакетов, напротив, по умолчанию модифицируется существующий образ. При действии через утилиты командной строки тот или иной порядок обновления задается опциями соответствующих субкоманд команды pkg.
Таким образом, на одной и той же машине могут одновременно сосуществовать два и более образов цельной системы. Возникает вопрос — каким образом с ними разобраться. И здесь пора перейти ко второму фундаментальному понятию OpenSolaris — средам загрузки и управлению ими.
Для этого вернемся к самому началу — моменту старта системы и появлению меню загрузчика GRUB. В свежеустановленной системе мы увидим там два пункта:
- opensolaris в графическом режиме и
- opensolaris в текстовом режиме загрузки.
Чтобы более не возвращаться к этому вопросу, скажу, что в обоих случаях происходит загрузка одного и того же образа системы, завершающаяся запуском Иксов и авторизацией в графическом режиме через gdm. Разница только в том, что в первом случае мы видим графическую сплэш-картинку, бегунок которой якобы отражает прогресс загрузки системы, а во втором выводятся текстовые сообщения о ее ходе. Собственно загрузка в текстовом режиме (в том числе и однопользовательском) тоже возможна, но об этом как-нибудь в другой раз.
Загрузившись любым образом и попав в рабочее окружение GNOME, мы очень быстро видим всплывающее над значком Диспетчера обновлений (на одной из двух умолчальных гномовских панелей) сообщение, предлагающее выполнить обновление системы. Разумеется, это имеет место быть только в том случае, если при инсталляции была корректно настроена сеть. В противном случае оно появится сразу после победы над сетевым интерфейсом.
Как показала практика, отказываться от этого предложения ни в коем случае не следует. Более того, его не следует и откладывать на потом — даже если, как это было в моем случае, обновлять в сущности и нечего (я устанавливал OpenSolaris через несколько часов после того, как версия 2008.11 стала доступной для скачивания). Напротив, надо незамедлительно щелкнуть на значке Диспетчера обновлений, после чего можно наблюдать список тех образов пакетов, которые можно обновить (рис. 1).

Рис. 1. Предложение диспетчера обновлений
Как видно из рисунка, обновлять мне было нечего. Однако, едва счастливо приобщившись к Интернету, я таки последовал совету Диспетчера и нажал на кнопку Обновить все. И уже на следующем же шаге осознал глубокий смысл этого действия (рис. 2): Диспетчер сделал просто копию текущего образа системы и внес соответствующие изменения в конфигурационный файла GRUB'а. Забегая вперед, скажу, что они выразились в появлении в его меню третьей строки — opensolaris-1, причем она оказалась отмеченной для загрузки по умолчанию. Загрузка предыдущего образа также будет доступной — но при использовании нового старый образ как бы не существует. И наоборот — любые изменения, внесенные в старый образ после его обновления (например, настройки или добавление пакетов) на новом образе никак не отразятся — как будто бы их и не было.

Рис. 2. Сообщение диспетчера обновлений
Впрочем, никаких изменений после завершения процедуры обновления (рис. 3) делать и не следует.

Рис. 3. Ход процедуры создания обновленного образа
Более того, следует, закрыв предварительно Диспетчер обновлений и не производя более никаких действий типа настраивания, подкручивания или инсталлирования, выполнить его последний завет (рис. 4), а именно — немедленно перезагрузиться.

Рис. 4. Последний завет Диспетчера обновлений