February 20

Cray: оживление легенды

В ИТ-индустрии существуют вещи, само существование которых давно стало красивым мифом, о котором принято вспоминать лишь шепотом и закатывая глаза от благоговения.

Настоящий Cray.

Cray

На сегодняшний день, во всем мире осталось наверное не больше пары сотен инженеров, заставших «те времена» и имевших возможность прикоснуться к легенде.

Лишь единицы из них еще могут что-то рассказать.

То что описано в этой статье — редчайшее знание, которое совсем недавно было доступно горстке избранных, с ученой степенью, специальной подготовкой и допусками к такому оборудованию.

Огромное, древнее чудовище из далекого прошлого, из времен мифов и легенд ожило и вернулось к жизни.. руками фанатов.

Дав возможность и простым людям прикоснуться к легенде.

Seymour Cray на фоне собственного суперкомпьютера.

Легенда

Персона Сеймура Крэя навсегда останется в анналах истории компьютеров, поскольку созданные его руками машины неоднократно признавались самыми быстрыми на планете.

Создаваемые полностью вручную (некоторые модели — вплоть до чипов) и имевшие цену в десятки миллионов долларов, суперкомпьютеры Cray поставлялись в исследовательские лаборатории, крупные датацентры и конечно же в разведывательные управления разных стран.

Про последнее стоит рассказать подробнее:

суперкопьютеры Cray всю историю плотно ассоциировались именно с секретными проектами, поскольку действительно часто использовались для взлома секретных кодов, паролей и шифров.

Что характерно, сам Крэй начинал карьеру во флоте (US NAVY) и работал над взломом японских шифров времен второй мировой войны, по всей видимости сохранив с тех лет хорошие отношения с главным разведывательным управлением.

У вас же, дорогой читатель шанс увидеть суперкомпьютер Cray был лишь в кино, где они довольно часто мелькали в качестве реквизита:

Ни о работе с такими машинами, ни тем более о разработке под них простым обывателям не стоило даже мечтать, даже если они родились и выросли в США.

Допуски, специальное обучение с сертификацией и чаще всего наличие PhD — вот что обычно требовалось от «пользователей» подобного оборудования.

В Россию суперкомпьютеры Cray предсказуемо завозились с очень большими препонами и исключительно простые модели. В частности в Росгидромете была практика использования таких машин, начавшаяся еще в 90е.

Как бы то ни было, простому обывателю доступ к суперкомпьютерам Cray был заказан.

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

Производство суперкомпьютеров Cray-1

Тем удивительней оказывается история, рассказанная ниже.

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

Симулятор

История создания симулятора Cray за авторством Andras Tantos сама по себе достойна голливудской экранизации, поскольку являет собой победу инженерного духа над всеми преградами и трудностями:

So it’s settled. I’m building a Cray-1.

Крайне рекомендую ознакомиться со всей этой историей, поскольку по накалу повествования описываемые события сильно напоминают историю изучения египетского письма или попытки расшифровать немецкие шифры времен второй мировой.

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

Затем пришлось вручную восстанавливать последовательность загрузки:

Разбираться с багами загрузчика и эмуляцией сети — не забываем что речь идет про суперкомпьютер, все основные части которого были связаны между собой по сети.

Andras провел чудовищную по объему и сложности работу, в успех которой к тому же никто особо не верил.

Именно поэтому результат его трудов настолько впечатляет.

Фронтальная панель суперкомпьютера Cray и индикаторы стадий запуска. Сверху кнопка включения.

Оживляем легенду

Симулятор использует внешние приложения для работы:

xterm, telnet, tmux

Все это необходимо установить на хосте до первого запуска симулятора.

Дополнительно я использовал cool-retro-term для наведения красоты, чтобы снимки экрана выглядели еще эпичнее.

Важное уточнение:

несмотря на использование сетевого telnet, полноценное взаимодействие с запущенной UNICOS придется настраивать позже и отдельно — запускаемый при старте telnet-клиент на самом деле подключается к портам симулятора, через которые происходит трансляция консольных команд в виртуальную ОС и обратно.

Настоящее сетевое подключение к UNICOS требует специальной настройки на хосте, а поскольку инсталляция происходит по сети — сей шаг является обязательным.

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

brctl addbr craybr
ip tuntap add mode tap tap1
ifconfig tap1 up
brctl addif craybr tap1
ifconfig craybr 172.16.0.1 netmask 255.255.255.0

Несмотря на всю внешнюю монструозность, ничего сложного тут нет:

создается новый мост с именем craybr, затем создается виртуальный сетевой интерфейс tap1, которому назначается IP-адрес 172.16.0.1.

Последним шагом этот интерфейс добавляется в мост.

Название интерфейса указывается в конфигурационном файле симулятора, который называется unicos.cfg, выдержка:

..
EthInterfaces {
			en0 {
				InterfaceNameLinux          tap1                ; Tap interface name to connect to on Linux
				InterfaceNameWindows        "Cray Ethernet"     ; WinTap interface name to connect to on Windows
				SimMacAddr                  0x020143524159
				Channel                     020
				IopNumber                   0
			}
		}
..		

IP-адрес должен быть именно 172.16.0.1, поскольку внутренний интерфейс в UNICOS указан как 172.16.0.2 и поменять его достаточно проблематично.

Можно зайти и немного дальше, включив роутинг наружу:

brctl setfd craybr 0
sysctl net.ipv4.ip_forward=1
iptables --table nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE

В случае Mageia исходящий интерфейс будет называться по-другому, что-то вроде wlp4s0.

На стороне UNICOS в симуляторе необходимо выполнить команду:

route add default 172.16.0.1

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

Все что вы видите в консоли выше - оригинальный софт от Cray, для суперкомпьютеров Cray.

Готовая сборка

Существуют готовые сборки симулятора Cray для 64-битного Linux, c уже установленным UNICOS версий 10.0.0.2 и 10.0.1.2, созданные известным в узких кругах камрадом neozeed.

Проблема в том, что эти сборки на момент написания статьи успели устареть (от 2022 года) и не факт что заработают в вашей системе.

А планов по обновлению у их автора нет.

Запускается симулятор из этих сборок с помощью стартового скрипта:

./unicos

Не забудьте что перед запуском необходимо выполнить скрипт для настройки сети (см выше).

Так выглядит запуск UNICOS 10.0.1.2 в симуляции суперкомпьютера Cray J90:

Я заменил стандартный xterm, используемый симулятором по-умолчанию на cool-retro-term для большей эпичности скриншотов.

Но конечно у настоящего Cray J-90 не было настолько древних мигающих терминалов и все выглядело куда современне:

Чуть более новый Cray T-90 с рабочим местом оператора (OWS)

Если приглядеться, можно заметить на мониторе рабочей станции, характерные квадратные окна 4dwm — оконного менеджера SGI Irix.

Все потому, что в разные исторические периоды для суперкомпьютеров Cray использовались разные терминальные системы — SunOS, Irix и даже Mac:

Чтобы добиться такого же эффекта, измените поле настройки NewTerminalCommand в файле unicos.cfg:

Так выглядит UNICOS в запущенном состоянии:

Согласно описанию автора, в системе есть следующие учетные записи:

The root password is 'password' and I've created a neozeed user with the password of 'password' so you can telnet in

Входим от root:

Если вы все настроили правильно, также заработать сеть между симулятором и хостом, в обе стороны.

Появится возможность войти уже по сети, непосредственно на машину Cray:

Для завершения работы симулятора, введите команду exit в нижней консоли основного приложения и нажмите Enter:

То что нижний блок - тоже терминал, причем допускающий ввод, я догадался не сразу.

В принципе даже этой версии хватит для последующих развратных действий с участием компилятора (см. ниже).

Если у вас успешно заработала готовая сборка и нет настойчивого желания «собрать из исходников» — следущий шаг можно пропускать и переходить сразу к стадии действительно изысканных приключений.

Первые суперкомпьютеры Cray были обшиты натуральной кожей убитых инженеров.

Сборка из исходников

Несмотря на то что сие занятие — точно не для всех и любимый ChatGPT врядли подскажет что-то разумное по этому проекту, сделать все же стоит — для большего погружения.

Симулятор написан на C++, с использованием библиотеки Boost, поэтому компиляция из исходников протекает.. весьма неспешно.

Забираем исходники:

git clone https://github.com/andrastantos/cray-sim.git

Релизных веток нет и все собирается из master.

Перед тем как запускать сборку необходимо установить следующие зависимости, версия для Ubuntu:

 g++ make libboost-all-dev libncurses-dev libgpm-dev

для Mageia:

gcc-c++ make lib64boost-devel lib64ncurses-devel lib64gpm-devel

Исходный код находится в каталоге simulator, поэтому сборка проекта также запускается именно оттуда, а не из корня репозитория.

Поскольку в пакетах Mageia нет статической версии библиотеки Boost, а для сборки Boost из исходниокв не хватило размеров статьи свободного места, я использовал динамическую линковку:

make LINK_TYPE=dynamic build

В Ubuntu сборка будет работать и вот так:

make build

Готовые бинарники будут находиться в каталоге simulator/_bin, но управляющие скрипты об этом знают, поэтому в ручную ничего перекладывать не надо.

Завершение установки на одном из сохранившихся Cray Y-MP, консоль - реальный терминал Wyse тех лет.

Установка UNICOS

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

установка операционной системы UNICOS в симуляторе суперкомпьютера Cray из оригинальных образов CD-дисков.

Когда-то, за процесс ввода суперкомпьютера в эксплуатацию, отвечала целая команда высококлассных и сертифицированных инженеров, которые тщательно оберегали свои секреты.

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

Как уже описывал выше, два случайно обнаруженных диска оказались единственными сохранившимися носителями загрузочного образа UNICOS и без них судьба симулятора сложилась бы совершенно иначе.

Образы UNICOS доступны по ссылкам:

Оба диска являются загрузочными, первый содержит UNICOS версии 10.0.0.2 для модели Cray J90, второй — UNICOS 10.0.1.2 для Cray SV1.

Шаги установки полностью совпадают, но устанавливать я буду более свежую версию 10.0.1.2, со второго ISO-образа.

Несмотря на то что разные версии этой ОС предназначены для установки на разные суперкомпьютеры, в условиях симулятора все отлично работает.

Так выглядит модель Cray SV1

Инструкция по установке от автора симулятора, находится тут, но к сожалению она успела немного устареть, поэтому придется использовать описанные в ней шаги с небольшими изменениями.

Напоминаю, что все команды ниже, выполняемые с хоста, как и управляющие скрипты симулятора подразумевают использование bash.

Со стороны UNICOS используется ksh, но для стадии установки это не особо важно.

Для упрощения вводимых команд, зададим две переменные окружения:

export ISO=/mnt/iso
export SIM=/opt/work/cray/cray-sim

Первая указывает на путь к примонтированному образу диска, вторая — полный путь до каталога с симулятором.

Монтируем загрузочный диск с UNICOS:

fuseiso ./cray-cd2.iso $ISO

Образ UNICOS содержит длинные имена файлов а также файлы и каталоги с именами в разных регистрах:

Поэтому использовать известный трюк сmount -o loop не получится.

Копируем архив с системой и ядро:

cp $ISO/unicos_exe/ram_fs $SIM
cp $ISO/unicos_exe/krn_11.bgz $SIM

Распаковываем архив с ядром:

cd $SIM
gzip -d -- < krn_11.bgz | cpio -i

В корневом каталоге симулятора появятся несколько новых файлов, нужный нам называется unicos.generic — то самое ядро.

На этой стадии можно наконец запустить симулятор, но пока с использованием образа RAMFS, который мы только что скопировали с установочного диска:

./unicos_ramfs

Запустится симулятор и появится терминал с подключением к UNICOS, запущенной в single user mode:

Кто бы мог подумать, что смогу запустить в Single User Mode ОС для суперкомпьютеров Cray

Теперь настраиваем сеть на стороне UNICOS, поскольку следующим шагом необходимо копировать системные файлы с примонтированного ISO-образа.

Напомню что подключение через telnet происходит на самом деле к самому симулятору, не к эмулируемой ОС внутри.

Вводим в консоли UNICOS:

ifconfig en0 172.16.0.2

После выполнения команды должна отрабатывать команда ping до хоста:

Дальше начинается еще один интересный этап, полный боли и страданий, поскольку придется встретиться с одной очень древней технологией передачи файлов между компьютерами — rcp.

UNICOS, который мы с вами запускаем это система из далекого 1997 года и ничего другого для передачи файлов в ее загрузочном образе просто нет.

Когда-то предполагалось, что весь процесс установки и запуска в эксплуатацию суперкомпьютера — строго секретный, поэтому с «usability» не заморачивались.

Есть еще один важный нюанс:

единственная доступная в образе утилита для передачи файлов на расстояние это клиент.

Для того чтобы подключиться с его помощью и скачать файл, надо поднимать сервер, сервер древнего rcp и на современном линуксе.

Ввиду своей древности, rcp в любом виде (как клиент и как демон) давно отсутствует по-умолчанию в любых линуксах и BSD, а его установка и запуск в современном окружении требует «особой уличной магии».

Для Ubuntu вам будет необходимо установить пакеты:

rsh-client rsh-server

для Mageia:

rsh rsh-server

В последней запуск rsh-сервера происходит через демон xinetd, который по-умолчанию отключен и попытка запуска будет выдавать ошибку:

xinetd.service is not active, cannot reload.

Поэтому сначала запускается xinetd, затем rsh:

service xinetd start
service rsh start

Следующим шагом необходимо разрешить использование демона rsh по сети (входящие подключения), для Ubuntu необходимо добавить строку в файл /etc/hosts.equiv:

172.16.0.2 +

Для Mageia используется файл ~/.rhosts

Это позволит подключиться к хосту и скопировать стартовый скрипт инсталляции в запущенную UNICOS.

Но прежде чем копировать, скрипт необходимо немного изменить.

Открываем файл install (находится в корневом каталоге симулятора) любимым редактором vi и заполняем значения переменных:

  • LOCAL_LOGIN = имя пользователя на хосте
  • ISO_MNT = /полный/путь/к каталогу с образом UNICOS

Также добавляем новую переменную SIM_LOC, которой устанавливаем значение в виде полного пути к каталогу с симулятором.

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

Чтобы ее избежать, необходимо задать еще одну переменную:

UNICOS_EXE=UNICOS_exe

В результате всех описанных выше правок должно получиться такое:

Финальный скрипт установки операционной системы Cray, мама будет вами гордиться ;)

Cохраняем изменения, затем на стороне UNICOS вводим команды, заменив предварительно имя пользователя и путь к симулятору:

cd /
rcp alex@172.16.0.1:/opt/work/cray/cray_sim/install .

В результате выполнения команды файл install будет скопирован с хоста и появится в корне файловой системы UNICOS:

Запускаем скопированный скрипт инсталляции UNICOS:

./install

Появится сообщение с перечислением введенных параметров:

Нажимаем любую клавишу и запустится увлекательный процесс установки операционной системы для суперкомпьютера Cray:

Несмотря на эпичность, это всего лишь копирование файлов по сети.

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

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

После чего установка наконец будет завершена:

Да, вы только что установили ОС на суперкомпьютер Cray, пусть и виртуальный.

Во время установки UNICOS происходит один очень важный шаг, о котором стоит рассказать — линковка ядра.

Эта практика происходит из времен первых UNIX, когда архитектур было много а стандартов мало. Совместимость оборудования хромала, поэтому такая линковка использовалась в качестве своеобразного финального теста системы.

Из современных операционных систем, эту практику сохранила например OpenBSD, хотя и по другой причине.

Останавливаем симулятор командой exit и убеждаемся, что основное ядро UNICOS успешно слинковано — должен появиться файл unicos.ymp.10012:

После этого, проверяем файл unicos.cfg, в котором должно появиться указание на новое ядро:

Если все хорошо и ссылка на свежее ядро на месте, запускаем полноценную симуляцию:

./unicos

Так выглядит полностью запущенный симулятор суперкомпьютера Cray J90 с только что установленной UNICOS:

Если на стороне UNICOS прописать маршрут по-умолчанию, такой же командой как и в готовой сборке:

route add default 172.16.0.2

..получим выход в интернет.

Прямо с суперкомпьютера Cray, вы правильно поняли:

Мам, я вывел суперкомпьютер Cray в интернет!

Вы же не думали, будто на этом я успокоюсь, открою шампанское, вызову девок и уйду в загул? Конечно же нет и впереди ждет еще много интересного и удивительного.

Графический интерфейс, на суперкомпьютере

В найденных образах UNICOS, один из которых мы только что использовали для установки, была обнаружена работающая клиентская библиотека для протокола X11.

Самого X-сервера внутри разумеется нет, поскольку далекие предки использовали специальные управляющие терминалы с SGI Irix:

Зато есть возможность пробросить отображение приложения с поддержкой протокола X11, чтобы оно отрисовывалось на запущенном современном Xorg-сервере хоста.

Что автор немедленно и проделал:

Часики, которые тикают прямо на суперкомпьютере Cray.

Два приложения на скриншоте выше xterm и xlock — запущены из работающей UNICOS и отображаются в Xorg-сервере на Mageia Linux.

Чтобы это повторить, необходимо принести кровавую жерт.. ээ выполнить три простых шага, описанные ниже.

Запуск Xorg-сервера с поддержкой сети

По-умолчанию и очень давно, даже в самых олдскульных дистрибьютивах вроде Slackware, X-сервер запускается с параметром -nolisten, запрещающим удаленное подключение по сети.

Чтобы в этом убедиться, достаточно выполнить команду на хосте, которая покажет запущенный X-сервер со всеми параметрами:

ps -ax |grep X

Запускается X-сервер из специального приложения «display manager» (dm), который ответчает за красивое графическое окно авторизации, поэтому параметры запуска X-сервера указываются в настройках этого менеджера.

Поскольку в моей системе используется LightDM, для того чтобы X-сервер начал прослушивать сетевой порт, я добавил следующую настройку в раздел [Seat:*] в файл /etc/lightdm/lightdm.conf.d/49-mageia.conf:

xserver-allow-tcp=true
xserver-command=X -listen tcp

После чего сервис lightdm необходимо перезапустить:

service lightdm restart

Естественно вас в этот момент выбросит из системы, так что будьте готовы и остановите заранее симулятор, если он был запущен.

Разрешение удаленного доступа без авторизации

Следующим шагом необходимо отключить авторизацию при подключении к X-серверу по сети.

Для этого авторизуйтесь с помощью DM и запустите графическое окружение — как вы обычно это делаете, затем введите в консоли:

xhost +

Выглядит это так:

После выполнения этой команды будет доступно удаленное подключение к вашему X-cерверу с любого хоста.

Что конечно считалось опасным еще лет двадцать назад, но в нынешние продвинутые времена (с Wayland вместо Xorg), когда о самой возможности такого удаленного подключения уже мало кто помнит — не стоит заморачиваться:

все, кто теоретически смог бы таким образом подключиться к вашей машине давно умерли или наслаждаются маразмом.

Кроме автора, разумеется.

Указание адреса удаленного X-сервера

Наконец последним шагом необходимо указать адрес удаленного X-сервера на стороне UNICOS.

Делается это командой (не забываем о ksh по-умолчанию):

setenv DISPLAY 172.16.0.1:0.0

Набор софта с графическим интерфейсом находится в каталоге /usr/bin/X11, так для примера выглядит запуск xterm:

"This is a private computer facility" - самое возбуждающее приглашение на свете.

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

И.. нет, это еще не конец.

Особенные радости, для особенных

Вместе с симулятором поставляется интересный архив goodies.tar, собранный оригинальным автором симулятора, который можно найти в каталоге unicos_tools.

Архив содержит несколько известных утилит, собранных для UNICOS, без которых жизнь юниксоида сера и уныла — bash и midnight commander.

Узрите смертные, ибо так выглядит ваш любимый mc , запущенный на суперкомпьютере Cray:

Страшно? А мы предупреждали.

Копируется сей замечательный архив с помощью уже известного по процессу установки rcp:

rcp alex@172.16.0.1:/opt/work/cray/cray-sim/unicos_toos/goodies.tar /

Распаковывается в каталог /usr, который уже присутствует в переменной окружения PATH:

cd /usr
tar xvf /goodies.tar
rm /goodies.tar

Перед запуском необходимо выставить бит запуска:

chmod +x /usr/bin/mc
chmod +x /usr/bin/bash

и соответствующие права:

chmod 765 /usr/bin/mc
chmod 765 /usr/bin/bash

Если mc будет ругаться при запуске, необходимо выставить тип терминала:

setenv TERM xterm

И нет, это тоже еще не коне..

(удары тяжелым предметом на фоне)

Механический голос за кадром:

..угроза раскрытия корпоративных секретов устранена.

Приступаю к зачистке территории.