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 выглядят так:
Пора сконфигурировать сеть. Вызовем соответствующую утилиту:
@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 на сервер:
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). Установка и первые опыты.