OpenVMS: операционная система для атомных станций. Настройка сети и активация лицензий

Продолжаем наше увлекательное погружение в операционную систему OpenVMS. В первой части мы установили её внутри виртуальной машины VirtualBox и освоили процесс подключения через Telnet-клиент. Теперь пришла пора активировать первую лицензию на сеть, установить OpenSSH и затем активировать все остальные лицензии. Без долгих вступлений — приступим.

Особенности лицензирования

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

Open означает не операционную систему с открытым исходным кодом, а соответствие определению открытых систем. Такое определение было сформулировано Институтом инженеров по электронике и радиотехнике (IEEE). Открытая система должна обладать:

  • переносимостью — приложение можно перенести с одной платформы на другую

  • средствами взаимодействия — системы разных вендоров могут работать совместно, приложения можно интегрировать

  • обеспечивать мобильность пользователей — переход с одной платформы на другую должен быть безболезненным для пользователей

В предыдущей статье мы упоминали файл X86COMMUNITYPAK. Это архив с текстовым файлом, содержащим хоббийную лицензию, выдаваемую сроком на год. В нашем случае лицензия будет действительна до 1 апреля 2024 года. Фактически это скрипт, содержащий последовательно выполняемые команды. Если поменять его расширение на .COM или просто поставить знак @ перед именем, то он выполнится в виде скрипта. Проблема лишь в том, что этот файл надо доставить на целевую систему. А без сети это сделать трудно.

Активация лицензии на сеть

План действий: заставить заработать стек TCP/IP, затем для удобства запустить демона OpenSSH и через SFTP запихнуть файл с лицензией на целевую систему. Так что распаковываем архив X86COMMUNITYPAK и открываем файл X86Community-20240401.txt через Visual Studio Code или любой другой текстовый редактор. Нас интересует следующая строка:

$ SHOW LICENSE OPENVMS-X86-BOE/PRODUCER=VSI/SINCE/NOOUTPUT/TERMINATION_DATE=1-APR-2024

Начинаем вводить команды в терминале по одной, начиная с:

LICENSE REGISTER OPENVMS-X86-BOE -

Для регистрации одной лицензии надо указать следующие данные в виде /КЛЮЧ=ЗНАЧЕНИЕ -:

  • /ISSUER=

  • /AUTHORIZATION=

  • /PRODUCER=

  • /UNITS=

  • /TERMINATION_DATE=

  • /OPTIONS=

  • /CHECKSUM=

Исходя из этого можно предположить, что:

  • механизм активации лицензий пригоден не только для самой VSI, но и для сторонних производителей ПО

  • поля /PRODUCER и /ISSUER в нашем случае заполняются одинаково — VSI. Вероятно, что в качестве /PRODUCER выступает производитель приложения, а /ISSUER может быть как производитель, так и дистрибьютор. Поэтому предусмотрено два поля, а не одно

  • если покопаться на просторах файлообменных сетей, то можно обнаружить условно «бессрочные» пиратские лицензии с /TERMINATION_DATE=18-DEC-2099. Было бы интересно узнать, предельное ли это значение

  • ключ /OPTIONS может содержать всякую всячину — от указания на архитектуру до специфических значений вроде MOD_UNITS. Это означает, что количество лицензий, указанных в /UNITS, можно увеличить

Это были мысли вслух, а теперь продолжаем процедуру. После ввода всех значений лицензия не активируется автоматически. Так что потребуется ещё одна команда:

LICENSE LOAD OPENVMS-X86-BOE

Вывод выглядит следующим образом:

%LICENSE-I-LOADED, VSI OPENVMS-X86-BOE was successfully loaded with 6 units

OpenVMS в своём командном языке (DCL) поддерживает удобное сокращение команд до четырёх и менее символов. Так, SHOW LICENSE легко превращается в SH LIC. А для отрицания параметра или квалификатора нужно использовать ключевое слово NO. Например, PRINT/NOCONFIRM.

Можно сделать предположение, что DCL сильно повлиял на развитие CLI в Cisco IOS. Вспомним о командах sh run, conf t и no shut для show running-config, configure terminal и no shutdown соответственно. Да и сообщения об ошибках выглядят так же.

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

$ SH LIC

Active licenses on node VMS1:

------- Product ID --------    ---- Rating ----- — Version --

Product            Producer    Units PCL   Activ Version Release    Termination

OPENVMS-X86-BOE    VSI             6  1     0      0.0  (none)       1-APR-2024

Как видим, всё успешно. Пора заняться сетью.

Настройка сети

В руководстве по установке сказано, что надо использовать тип сетевого адаптера Виртуальный адаптер хоста и эмуляцию адаптера Intel PRO/1000 MT Server. Но на практике отлично заработало и с обычным сетевым мостом на физическую сетевую карту. В нашем случае параметры сети в VirtualBox выглядят так:

f2f649a40e1b03092709647b8b36d261.png

Пора сконфигурировать сеть. Вызовем соответствующую утилиту:

@TCPIP$CONFIG

Откроется интерактивное текстовое меню:

                TCP/IP Network Configuration Procedure

        This procedure helps you define the parameters required

        to run VSI TCP/IP Services for OpenVMS on this system.

        Checking TCP/IP Services for OpenVMS configuration database files.

        VSI TCP/IP Services for OpenVMS Configuration Menu

        Configuration options:

                 1 —  Core environment

                 2 —  Client components

                 3 —  Server components

                 4 —  Optional components

                 5 —  Shutdown VSI TCP/IP Services for OpenVMS

                 6 —  Startup VSI TCP/IP Services for OpenVMS

                 7 —  Run tests

                 A —  Configure options 1 — 4

                [E] —  Exit configuration procedure

Процедура настройки разбита на 4 шага, каждый из которых можно выполнить отдельно. Поскольку у нас первоначальная настройка, то нажимаем клавишу А. Это последовательно проведёт нас по всем шагам. Домен указываем любой, и это вернёт нас в меню Core environment.

Нажимаем цифру 2 и попадаем в раздел Interfaces:

      VSI TCP/IP Services for OpenVMS Interface & Address Configuration Menu

 Hostname Details: Configured=Not Configured, Active=VMS1

 Configuration options:

   0 —  Set The Target Node (Current Node: VMS1)

   1 —  IE0 Menu (EIA0: TwistedPair 1000mbps)

Здесь в пункте 1 должен отобразиться доступный сетевой интерфейс и его скорость. Нажимаем соответствующую клавишу и, следуя подсказкам системы, задаём primary address:

      VSI TCP/IP Services for OpenVMS Interface IE0 Configuration Menu (Node: VMS1)

 Configuration options:

         1 — Add a primary address on IE0

         2 — Add an alias address on IE0

         3 — Enable DHCP client to manage address on IE0

В нашем случае интерфейс подключён к роутеру Mikrotik, выступающему в роли DHCP-сервера. Нажимаем клавишу 3.

No interface is configured as the DHCP PRIMARY.

    Either configure a DHCP PRIMARY or manually configure

    the system-wide parameters.

    DHCP Client configures system-wide parameters and

    interface-specific parameters. Only one interface, the

    DHCP «primary» interface, can receive system-wide

    parameters.

Configure IE0 as the DHCP PRIMARY? (Y, N, HELP) [Y]:

Соглашаемся, нажав Y. Это активирует DHCP-клиент на интерфейсе. Теперь надо прописать основной шлюз. Нажимаем E для выхода в меню Interfaces и далее 3 для входа в меню Routing. Нас встретит традиционный для этих систем вопрос: курица или рыба:

* Do you want to configure dynamic ROUTED or GATED routing [NO]:

В квадратных скобках есть более интересный вариант — пропустить этот выбор. Так и сделаем, нажав Enter. А вот на следующий вопрос стоит дать положительный ответ:

* Do you want to configure a default route [YES]:

Просто нажимаем Enter, вводим адрес шлюза по умолчанию. У нас это 192.168.88.1. Система ругнётся на то, что этого адреса нет в её локальной базе данных, и попросит обозвать как-нибудь роутер. Вводим любое имя, например mikrotik.

И вновь мы провалились в меню Core environment. Осталось задать резолвер доменных имён, так что нажимаем цифру 4:

BIND RESOLVER Configuration

        A BIND resolver has not been configured.

        VSI TCP/IP Services for OpenVMS supports the Berkeley Internet Name

        Domain (BIND) resolver. BIND is a network service that enables clients

        to name resources or objects and share information with other objects

        on the network.

        Before configuring your system as a BIND resolver, you should

        first be sure that there is at least one system on the network

        configured as either a BIND primary or secondary server for

        this domain.

        You can specify a BIND server by its address or name;

        however, if specified by name, an entry for it must

        exist in the TCPIP$HOST database.

        You will be asked one question for each server.

        Press Return at the prompt to terminate the list.

Enter your BIND server name:

Вводим IP-адрес резолвера. У нас он совпадает с основным шлюзом, то есть 192.168.88.1. Система спросит, какой сервер опрашивать следующим. Просто пропускаем этот вопрос, нажав Enter

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

%TCPIP-I-FSIPADDRUP, IE0 192.168.88.29 primary active on node VMS1, interface IE0

Это говорит о том, что сеть поднялась и роутер с лёгкой руки отсыпал адрес 192.168.88.29. Нажимаем Enter и выходим из утилиты конфигурирования. Может показаться, что на этом всё, но не тут-то было. Если виртуальную машину перезагрузить, то сеть пропадёт. Чтобы добавить сеть в автозапуск, надо отредактировать файл SYS$COMMON:[SYSMGR]SYSTARTUP_VMS.COM, найти и раскомментировать следующую строку:

$!$ @SYS$STARTUP: TCPIP$STARTUP.COM

В состав OpenVMS входит редактор EDIT. Давайте откроем наш конфигурационный файл автозагрузки:

EDIT /EDT SYS$COMMON:[SYSMGR]SYSTARTUP_VMS.COM

Он может работать в двух режимах: построчное редактирование и привычный нам визуальный режим. По умолчанию включён первый режим, и надо выполнить переключение. Вводим команду CHANGE после символа * и подтверждаем клавишей Enter. Откроется содержимое файла, перемещаться по которому можно с помощью стрелок на клавиатуре. Пролистываем вниз, находим искомую строку и приводим её к виду:

$ @SYS$STARTUP: TCPIP$STARTUP.COM

Выходим из визуального режима сочетанием клавиш Ctrl + Z и вводим команду выхода EXIT после символа *. Файл при этом сохранится.

Файлы в OpenVMS ведут себя слегка необычно. У них по умолчанию включено версионирование. Так что когда мы отредактировали SYSTARTUP_VMS.COM, то на деле мы считали файл SYSTARTUP_VMS.COM;1. Цифра после точки с запятой как раз обозначает версию. После внесения изменений мы закрыли редактор, но это не заменило содержимое файла, а создало новую его версию SYSTARTUP_VMS.COM:2. 

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

Итак, раз уж сеть настроена, то перезагрузимся командой REBOOT и пропингуем какой-нибудь внешний ресурс, например DNS Cloudflare. Вначале выполняем команду TCPIP и пишем привычную команду PING 1.1.1.1:

TCPIP> PING 1.1.1.1

PING 1.1.1.1 (1.1.1.1): 56 data bytes

64 bytes from 1.1.1.1: icmp_seq=0 ttl=59 time=10 ms

64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=10 ms

64 bytes from 1.1.1.1: icmp_seq=2 ttl=59 time=10 ms

64 bytes from 1.1.1.1: icmp_seq=3 ttl=59 time=10 ms

----1.1.1.1 PING Statistics----

4 packets transmitted, 4 packets received, 0% packet loss

round-trip (ms) min/avg/max = 10/10/10 ms

Снаружи наш сервер теперь тоже пингуется:

PS C:\Users\User> ping 192.168.88.29

Обмен пакетами с 192.168.88.29 по с 32 байтами данных:

Ответ от 192.168.88.29: число байт=32 время<1мс TTL=64

Ответ от 192.168.88.29: число байт=32 время<1мс TTL=64

Ответ от 192.168.88.29: число байт=32 время<1мс TTL=64

Ответ от 192.168.88.29: число байт=32 время<1мс TTL=64

Статистика Ping для 192.168.88.29:

    Пакетов: отправлено = 4, получено = 4, потеряно = 0

    (0% потерь)

Приблизительное время приёма-передачи в мс:

    Минимальное = 0 мс, Максимальное = 0 мс, Среднее = 0 мс

Итак, сеть успешно настроена. Переходим к настройке SSH.

Настройка OpenSSH

OpenVMS 9.2.1 по умолчанию устанавливает OpenSSH в процессе инсталляции. Но без дополнительной настройки демон работать не будет. Она начнётся с создания двух служебных пользователей и присвоения им дефолтной группы:

@SYS$COMMON:[OPENSSH.BIN]SSH$CREATE_ACCOUNT.COM

Система спросит номер группы и автоматически предложит значение 3656. Соглашаемся, нажав Enter. Теперь надо сгенерировать файл, который будет отвечать за автозапуск демона:

@SYS$COMMON:[OPENSSH.BIN]SSH$CREATE_STARTUP_FILE.COM

Система сделает все необходимые действия автоматически. Теперь генерируем ключики:

@SYS$COMMON:[OPENSSH.BIN]SSH$GENERATE_KEYS.COM

Очищаем всё лишнее:

@SYS$COMMON:[OPENSSH.BIN]SSH$INSTALL_INFO.COM

Получаем сообщение об успешном завершении очистки и готовности к работе:

Purging installed files…

Successfully finished

   To automatically start OpenVMS OpenSSH during system startup

   add the following line to the file SYS$MANAGER: SYSTARTUP_VMS.COM

   after the TCPIP startup command procedure:

        $ @SYS$STARTUP: SSH$STARTUP.COM

   Define symbols for all OpenSSH utilities:

        $ @SSH$ROOT:[BIN]SSH$DEFINE_COMMANDS.COM

Точно так же, как и с сетью, надо добавить демона в автозагрузку:

EDIT /EDT SYS$COMMON:[SYSMGR]SYSTARTUP_VMS.COM

Переходим в визуальный режим (CHANGE) и ищем введённую ранее строку $ @SYS$STARTUP: TCPIP$STARTUP.COM. Вводим после неё следующие две строки:

$ @SYS$STARTUP: SSH$STARTUP.COM

$ @SSH$ROOT:[BIN]SSH$DEFINE_COMMANDS.COM ALL

Первая отвечает за автозапуск демона OpenSSH, а вторая позволит нам использовать удобные алиасы в оболочке. Выходим из визуального режима Ctrl + Z и закрываем редактор EXIT. Система подтвердит, что записала уже третью версию файла.

SYS$COMMON:[SYSMGR]SYSTARTUP_VMS.COM;3 418 lines

Перезагружаемся и коннектимся к системе через любимый SSH-клиент, например PuTTY:

    Last interactive login on Sunday, 13-AUG-2023 20:48:49.91

    Last non-interactive login on Monday, 31-JUL-2023 19:54:34.95

$ sh sys

OpenVMS E9.2–1  on node VMS1   13-AUG-2023 21:16:35.22   Uptime  0 00:35:00

  Pid    Process Name    State  Pri      I/O       CPU       Page flts  Pages

00000401 SWAPPER         HIB     16        0   0 00:00:00.03         0     17

00000404 LANACP          HIB     14       61   0 00:00:00.03       217    269

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

Активация оставшихся лицензий

Теперь, когда у нас есть доступ по сети и OpenSSH, мы можем воспользоваться SCP для копирования файлов с локальной машины. Правда, это применимо исключительно для машин с Linux. Ну, а любителям Windows ничего не остаётся, кроме как применить какой-нибудь SFTP-клиент. Берём FileZilla и вводим следующие данные:

Нажимаем Quickconnect —и вуаля: содержимое виртуальной машины с OpenVMS отобразится в правой панели. Простым перетаскиванием закидываем файл с лицензией X86Community-20240401.txt на сервер:

56017d443bf9c7d24fc4d1533aeaf9d9.png

OpenVMS умеет любой текстовый файл выполнять в качестве скрипта. Задаём команду в консоли:

@X86Community-20240401.txt

Магия сработала — и все лицензии успешно активировались:

$ SH LIC

Active licenses on node VMS1:

------- Product ID --------    ---- Rating ----- — Version --

Product            Producer    Units PCL   Activ Version Release    Termination

ABS-CLIENT-X86     VSI             6  1     0      0.0  (none)       1-APR-2024

ABS-SERVER-X86     VSI             6  1     0      0.0  (none)       1-APR-2024

ACMS               VSI             6  1     0      0.0  (none)       1-APR-2024

ACMS-REM           VSI             6  1     0      0.0  (none)       1-APR-2024

ACMS-RT            VSI             6  1     0      0.0  (none)       1-APR-2024

AVAIL-MAN          VSI             6  1     0      0.0  (none)       1-APR-2024

BASIC              VSI             6  0     1      0.0  (none)       1-APR-2024

C                  VSI             6  0     1      0.0  (none)       1-APR-2024

CARTRIDGE-SERVER-V VSI             6  1     0      0.0  (none)       1-APR-2024

CMS                VSI             6  1     0      0.0  (none)       1-APR-2024

COBOL              VSI             6  0     1      0.0  (none)       1-APR-2024

CXX-V              VSI             6  0     1      0.0  (none)       1-APR-2024

DFG                VSI             6  1     0      0.0  (none)       1-APR-2024

DFS                VSI             6  1     0      0.0  (none)       1-APR-2024

DQS                VSI             6  1     0      0.0  (none)       1-APR-2024

DTM                VSI             6  1     0      0.0  (none)       1-APR-2024

DTR                VSI             6  1     0      0.0  (none)       1-APR-2024

DVNETEXT           VSI             6  1     0      0.0  (none)       1-APR-2024

FMS                VSI             6  1     0      0.0  (none)       1-APR-2024

FMS-RT             VSI             6  1     0      0.0  (none)       1-APR-2024

FORMS              VSI             6  1     0      0.0  (none)       1-APR-2024

FORMS-RT           VSI             6  1     0      0.0  (none)       1-APR-2024

FORTRAN            VSI             6  0     1      0.0  (none)       1-APR-2024

GKS                VSI             6  1     0      0.0  (none)       1-APR-2024

GKS-RT             VSI             6  1     0      0.0  (none)       1-APR-2024

LSE                VSI             6  1     0      0.0  (none)       1-APR-2024

MMS                VSI             6  1     0      0.0  (none)       1-APR-2024

OMNI               VSI             6  1     0      0.0  (none)       1-APR-2024

OPENVMS-X86-BOE    VSI             6  1     0      0.0  (none)       1-APR-2024

OPENVMS-X86-HAOE   VSI             6  1     0      0.0  (none)       1-APR-2024

OSAP               VSI             6  1     0      0.0  (none)       1-APR-2024

PASCAL             VSI             6  0     1      0.0  (none)       1-APR-2024

PCA                VSI             6  1     0      0.0  (none)       1-APR-2024

RMSJNL             VSI             6  1     0      0.0  (none)       1-APR-2024

RTR-CL             VSI             6  1     0      0.0  (none)       1-APR-2024

RTR-SVR            VSI             6  1     0      0.0  (none)       1-APR-2024

SAVE-SET-MANAGER   VSI             6  1     0      0.0  (none)       1-APR-2024

SW-RAID5           VSI             6  1     0      0.0  (none)       1-APR-2024

TDMS               VSI             6  1     0      0.0  (none)       1-APR-2024

TDMS-RT            VSI             6  1     0      0.0  (none)       1-APR-2024

VAXSET             VSI             6  1     0      0.0  (none)       1-APR-2024

VMSCLUSTER         VSI             6  1     0      0.0  (none)       1-APR-2024

VMSCLUSTER-CLIENT  VSI             6  1     0      0.0  (none)       1-APR-2024

VOLSHAD            VSI             6  1     0      0.0  (none)       1-APR-2024

X25                VSI             6  1     0      0.0  (none)       1-APR-2024

Заключение

Поздравляем! Теперь наша система полностью активирована и готова к работе. Для удобного управления у нас есть OpenSSH, а обмениваться файлами можно через FileZilla. Но это лишь начало пути. В следующей статье мы настроим веб-морду и попробуем запустить какое-нибудь кастомное приложение. 

Ну, а если вы ещё не видели первую часть этой статьи, то она доступна по ссылке: OpenVMS: операционная система для атомных станций (часть 1). Установка и первые опыты.

© Habrahabr.ru