В прошлых статьях мы установили OpenVMS в качестве виртуальной машины и разобрались с тем, как правильно настроить сеть и активировать хоббийную лицензию. Теперь предлагаем настроить веб-сервер и установить административный WebUI, позволяющий управлять некоторыми функциями сервера без необходимости выполнения команд в консоли.
![](https://habrastorage.org/getpro/habr/upload_files/a14/2d8/63e/a142d863ebefae0346055fc044a90b62.png)
Подготовка к установке
Начать установку веб-интерфейса стоит со скачивания пакетов на свой локальный компьютер. Для этого заходим на портал VSI (доступно обладателям хоббийной лицензии) и скачиваем три пакета:
X86VMS-CIVETWEB-V0114-0D-1
X86VMS-LUA-V0503-5D-1
X86VMS-WEBUI-V0401-1-1
Основной пакет — X86VMS-WEBUI-V0401-1-1, а другие являются зависимостями для него. Все они представляют собой обычные ZIP-архивы и будут распакованы непосредственно на целевой системе. Чтобы не мешать всё в одну кучу, создадим для них отдельную директорию. Подключаемся через SSH, который мы настроили в прошлой статье, и создаём директорию SOFT:
$ CREATE /DIR DKA100:[SOFT]
Привычной команды cd (change directory) в OpenVMS нет. Вместо этого используется SET DEFAULT:
$ SET DEFAULT DKA100:[SOFT]
Открываем FileZilla, соединяемся по SFTP и заливаем скачанные пакеты:
![](https://habrastorage.org/getpro/habr/upload_files/5b4/a87/0d1/5b4a870d1a9e6137c63bb2d9b06a5ad2.png)
Проверяем:
$ DIR
Directory DKA100:[SOFT]
X86VMS-CIVETWEB-V0114-0D-1.ZIP;1
X86VMS-LUA-V0503-5D-1.ZIP;1
X86VMS-WEBUI-V0401-1-1.ZIP;1
Total of 3 files.
Установка Lua
Утилита распаковки уже установлена в операционной системе, но вот вызывать её привычной командой unzip нельзя. Так что упростим себе жизнь, создав соответствующий алиас:
$ UNZIP :== $SYS$COMMON:[SYSHLP.UNSUPPORTED.UNZIP]UNZIP.EXE
Теперь распакуем пакет с Lua:
$ UNZIP X86VMS-LUA-V0503-5D-1.ZIP
И выполним установку:
$ PRODUCT INSTALL LUA
Система попросит подтвердить установку пакета — просто нажмите клавишу Enter. После завершения установки на экране появится предупреждение, что для автоматического запуска Lua вместе с операционной системой потребуется внесение изменений в файл SYSTARTUP_VMS.COM:
VSI X86VMS LUA V5.3-5D: Lua for OpenVMS is based on Lua Version 5.3.5
Post-installation tasks are required.
To start the Lua runtime at system boot time, add the following
lines to SYS$MANAGER:SYSTARTUP_VMS.COM:
$ file := SYS$STARTUP:LUA$STARTUP.COM
$ if f$search("''file'") .nes. "" then @'file'
To stop Lua at system shutdown, add the following lines to
SYS$MANAGER:SYSHUTDWN.COM:
$ file := SYS$STARTUP:LUA$SHUTDOWN.COM
$ if f$search("''file'") .nes. "" then @'file'
По SSH редактор EDIT работает некорректно, в частности, нельзя переключиться командой CHANGE. Сделаем так, чтобы при вызове команды EDIT приложение автоматически переключалось в нужный нам режим редактирования:
$ SET TERM/INQUIRE
Это сработает до перезагрузки. Если хочется, чтобы эта настройка срабатывала при загрузке OpenVMS, то загляните под спойлер:
Спойлер
Переходим в директорию SYS$LOGIN:
$ SET DEFAULT SYS$LOGIN
Открываем файл SYLOGIN.COM:
$ EDIT SYLOGIN.COM
Находим строку:
$ TT_NOINQUIR = "|TW|RT|WT|TK|WS|PY|FT|TN|"
Удаляем оттуда |FT, оставив всё остальное, чтобы строка приняла вид:
$ TT_NOINQUIR = "|TW|RT|WT|TK|WS|PY|TN|"
Сохраняемся и выходим из редактора сочетанием клавиш Ctrl + Z. Чтобы изменения сработали, нужно будет завершить текущую SSH-сессию и подключиться заново.
Теперь добавляем установленный Lua в автозагрузку. Открываем на редактирование файл:
$ EDIT SYS$MANAGER:SYSTARTUP_VMS.COM
Добавляем две строки в конец файла, но перед завершающей строкой со словом EXIT:
$ file := SYS$STARTUP:LUA$STARTUP.COM
$ if f$search("''file'") .nes. "" then @'file'
Обратите внимание, что в части ("''file'") символы "'' — это не две двойные кавычки, а одна двойная кавычка и два апострофа, а '" — это один апостроф и одна двойная кавычка.
Сохраняемся и выходим сочетанием клавиш Ctrl + Z. Чтобы демон корректно выключался при завершении работы ОС, проделаем то же самое с SYSHUTDWN.COM:
$ EDIT SYS$MANAGER:SYSHUTDWN.COM
Добавляем строки в конец файла перед EXIT:
$ file := SYS$STARTUP:LUA$SHUTDOWN.COM
$ if f$search("''file'") .nes. "" then @'file'
Так же (Ctrl + Z) сохраняемся и выходим. Можно или просто перезагрузиться, или стартовать Lua вручную:
$ @SYS$STARTUP:LUA$STARTUP.COM
Установка CivetWeb
Переходим к установке второго пакета X86VMS-CIVETWEB-V0114-0D-1. Действуем точно так же, а именно распаковываем архив:
$ UNZIP X86VMS-CIVETWEB-V0114-0D-1.ZIP
В процессе система спросит, заменить ли файл манифеста. Поскольку мы не создавали под каждый пакет отдельную директорию, просто отвечаем Yes. Затем устанавливаем сам CIVETWEB:
$ PRODUCT INSTALL CIVETWEB
Так же, как и в случае с Lua, потребуется внести пару строк в автозагрузку:
$ EDIT SYS$MANAGER:SYSTARTUP_VMS.COM
Добавляем строки:
$ file := SYS$STARTUP:CIVETWEB$STARTUP.COM
$ if f$search("''file'") .nes. "" then @'file'
Далее нажимаем Ctrl + Z и аналогично Lua прописываем в скрипт выключения:
$ EDIT SYS$MANAGER:SYSHUTDWN.COM
Вносим строки:
$ file := SYS$STARTUP:CIVETWEB$SHUTDOWN.COM
$ if f$search("''file'") .nes. "" then @'file'
Чудесно! Сохраняемся и выходим (Ctrl + Z). CivetWeb установлен, но пока у него нет конфигурации. Так что слегка повременим с запуском и вначале сконфигурируем его, используя установленные шаблоны. Чтобы предупредить возникновение ошибок при копировании, включаем расширенный парсинг имён файлов для файловой системы ODS-5:
$ SET PROC/PARSE_STYLE=EXTENDED
Переходим в директорию с CivetWeb:
$ SET DEFAULT CIVETWEB$ROOT:[CONF]
Там будут лежать два шаблона:
$ DIR
Directory CIVETWEB$ROOT:[conf]
civetweb^.conf.template;1
services^.conf.template;1
Total of 2 files.
Если вдруг их там нет или выдаёт ошибку, то просто запустите CivetWeb вручную:
$ @SYS$STARTUP:CIVETWEB$STARTUP.COM
Приложение при этом не заработает, но шаблоны будут сгенерированы. Скопируем их и дадим рабочие названия:
$ COPY CIVETWEB^.CONF.TEMPLATE CIVETWEB.CONF
$ COPY SERVICES^.CONF.TEMPLATE SERVICES.CONF
Теперь уже с чистой совестью можно запускать CivetWeb. Просто повторяем команду:
$ @SYS$STARTUP:CIVETWEB$STARTUP.COM
Открываем браузер и проверяем, что веб-сервер на порте 8082 заработал корректно:
![](https://habrastorage.org/getpro/habr/upload_files/6a9/58c/e16/6a958ce16020c990a7abfa043391a5f6.png)
Если вы видите такую картинку, то всё сделали правильно. Можно кликнуть по demo.lua и убедиться, что веб-страница откроется.
Установка WebUI
Возвращаемся в директорию, где лежит оставшийся пакет для установки WebUI:
$ SET DEFAULT DKA100:[SOFT]
Распаковываем его, соглашаясь на замену всех файлов с совпадающими именами:
$ UNZIP X86VMS-WEBUI-V0401-1-1.ZIP
Установка ничем не отличается от уже описанных выше действий:
$ PRODUCT INSTALL WEBUI
Спустя минуту веб-интерфейс будет установлен, а инсталлятор предупредит о необходимости выполнения дополнительных действий. Так же, как с Lua и CivetWeb, потребуется добавить WebUI в автозагрузку:
$ EDIT SYS$MANAGER:SYSTARTUP_VMS.COM
Идём в конец файла и добавляем ещё пару строк:
$ file := SYS$STARTUP:WEBUI$RESTART.COM
$ if f$search("''file'") .nes. "" then @'file'
Сохраняемся и выходим (Ctrl + Z). Особенность OpenVMS в том, что даже суперпользователь SYSTEM по умолчанию не будет иметь прав для использования WebUI. Так что предварительно надо будет позаботиться об этом. Переходим в директорию SYSTEM:
$ SET DEFAULT SYS$SYSTEM
Запускаем системную утилиту AUTHORIZE для управления пользователями и выделения им прав доступа:
$ RUN AUTHORIZE
UAF>
Создаём две записи, последовательно выполняя следующие команды:
UAF> ADD/IDENTIFIER WEBUI_READ
UAF> ADD/IDENTIFIER WEBUI_WRITE
Теперь присваиваем пользователю SYSTEM права на запись и выходим из утилиты:
UAF> GRANT/IDENTIFIER WEBUI_WRITE SYSTEM
UAF> EXIT
С правами разобрались. Осталось лишь создать конфигурационные файлы из поставляемых с WebUI шаблонов и подсунуть их CivetWeb. Переходим в директорию с конфигами CivetWeb:
$ SET DEFAULT CIVETWEB$ROOT:[CONF]
Поочерёдно создаём конфиги:
$ COPY CIVETWEB^.CONF.WEBUI CIVETWEB.CONF
$ COPY SERVICES^.CONF.WEBUI SERVICES.CONF
$ COPY ALERT_IMAGES^.CONF.TEMPLATE ALERT_IMAGES.CONF
$ COPY THREADS^.CONF.TEMPLATE THREADS.CONF
$ COPY WEBUI^.CONF.TEMPLATE WEBUI.CONF
И финально возвращаемся в директорию с пакетами приложений:
$ SET DEFAULT DKA100:[SOFT]
Стартуем:
$ @SYS$STARTUP:WEBUI$RESTART.COM
Это автоматически вызовет перезапуск CivetWeb и запустит WebUI. Открываем браузер и переходим по адресу:
http://<IP_OpenVMS>:8082
![](https://habrastorage.org/getpro/habr/upload_files/901/6cd/660/9016cd660d77524f46dc6f1e749d4726.png)
Вводим данные пользователя SYSTEM и нажимаем LOG IN:
![](https://habrastorage.org/getpro/habr/upload_files/28c/478/ccd/28c478ccd64939f549bbebafda8099e6.png)
Теперь рядовые операции можно делать вообще не притрагиваясь к консоли, а также наглядно оценивать загрузку системы:
![](https://habrastorage.org/getpro/habr/upload_files/a79/3d3/23a/a793d323a682a9461c46b6a343ff49c1.png)
Вместо заключения
На первый взгляд операционная система OpenVMS может показаться сложной и нелогичной. Но чем больше мы с ней экспериментируем, тем понятнее становятся те или иные приёмы работы. Установка веб-интерфейса управления стала ещё одним шагом к лучшему пониманию системы. В следующий раз мы попробуем использовать OpenVMS в нескольких рядовых сценариях — например, установим какие-нибудь популярные приложения с открытым исходным кодом и проверим их работу на практике.