Когда-то давно решил помочь своей конторе с сайтом (тем более, что мне нравится это всё). Т.к. я довольно жадный, то решил, что платить 160р в месяц хостеру это дофига. Тем более, что это просто место на диске. Тем более, что его всего ничего 2гб, а не 160 как у меня. Внешний статический ip имелся в наличии и я полез изучать тему.
В интернете писали о том, что хорошо подходит для таких дел freebsd (на тот момент 9 версии). Поставил эмулятор операционной системы в винде и приступил к процессу.
С Линуксом я немного имел опыта до этого, а вот с Юниксом нет и было очень интересно чем это закончится. По инструкции и интернета и видео уроков от Беши (так вроде звали этого картавого) мне удалось установить ось, поднять на ней php, mysql, ftp и т.п. штуки для успешного развёртывания сайта. В процессе я ощутил всю прелесть командной строки: удобство установки программ одной командой из портов, всяких обновлений и т.д. Всё это происходило не без проблем и ошибок, но в итоге я с гордостью наблюдал "хеллоу ворд" по адресу 192.168....
Но этого мне было мало. Я, как виндузятник со стажем, не желал топтать клаву, а хотел мышью окна закрывать. Что ж... есть же удобная консоль, куда можно ввести команду, оно установится и заработает. Ведь установится и заработает? *Падме.жпг*
Правдой из этого была только первая часть. Дальше начинался секис. Эта штука зависала при запуске либо сыпала ошибки из эмулированного рога изобилия на чёрном экране. Что я только не делал. Ещё и информации было очень мало об этом. Терзал я это дело очень долго. Уже и не помню сколько. Может месяц, может дольше. В итоге удалось победить этот чёртов чёрный экран и я увидел то, ради чего началась эта сексуальная драма: графический интерфейс, мышка, иконки, обои на рабочем столе. Радость была выше крыши. Тепрь-то мы всё как надо сделаем, теперь-то оно заработает как я хочу. Погнали!
И вот тут снова появляется эта *Падме.жпг*. Тогда ещё небыло этого мема, но был он очень в тему. Как говорится всё познаётся в сравнении. Я быстро понял, что намного проще и быстрее набрать make&install, чем что-то качать, пытаться запустить. Плюс все было засунуто хрен пойми куда. Чтоб найти какую-то настройку нужно долго искать где это вообще находится. И не факт, что найдёшь.
В общем я понял, что графика в данном случае зло и вернул всё как было в начале.
Ну и в процессе узнал, что сделать сайт на своём компе можно и даже открыть доступ к нему всем, но как быть с безопасностью? Пока я мучался с графикой, на сайте появились первые посетители и какие-то гомосекиенсы начали самозабвенно брутфорсить админку. Узнал я об этом из гневного письма хостера о сильном превышении нагрузки. Полез изучать логи и ахренел от количества запросов post. Заставив этого пидрика кушать ошибку 403 вместо "неверное имя или пароль", я задумался. Стоят ли эти жалкие 160р всего того, с чем я могу столкнуться? Может и стоят, но, прикинув количество киловатт, которые будут к оплате в конце месяца, моя жаба убрала одну лапу с шеи и поток свежего кислорода в мозг позволил понять, что разница будет уже не столь велика.
В общем бросил я это гиблое дело. Однако мне очень понравилась эта операционная система. Я никогда не думал, что может быть настолько удобно пользоваться консолью. Но применения этому я так и не нашёл. Сайт всё так же крутится у того же хостера уже много лет.
P.S. Хостер на сообщение о том, что меня ломают и не хотел бы он слегка прибить гада ответил, что проблемы индейцев всегда были и будут проблемами индейцев.
Если вам успели надоесть и азиатки и знойные африканки и даже развратные животные, рассказываю про одну редкую UNIX-систему из далекого прошлого, которая был возвращена из небытия и выведена в интернет.
Так это выглядит в работе.
История
OSF/1 это еще одна редкая UNIX-система из далекого прошлого, которую вы врядли могли наблюдать в живую:
Прямой участник корпоративных Unix‑разборок 90х известных как Unix Wars, но в отличие от A/UX (которую автор оживил и запустил в прошлом выпуске) OSF/1 не канула в лету в бурные 90е а будучи переименованной в TRUE64 UNIX поддерживалась аж до 2012го года.
Вот вам и «динозавр», внезапно отказавшийся умирать.
Еще из интересных фактов стоит упомянуть использование этой ОС для суперкомпьютеров:
OpenBSD/luna88k running inside GXemul, on an emulated SGI O2 running OpenBSD/sgi (on a FreeBSD/amd64 host). Теперь попробуйте осознать прочитанное.
Эмулятор
Полностью оно называется Gavare's eXperimental Emulator за авторством Anders Gavare и согласно официальному описанию с сайта проекта, считает себя фреймворком для виртуализации:
GXemul is a framework for full-system computer architecture emulation, mostly written in 2003-2005. Several real machines were implemented within the framework, consisting of processors (ARM, MIPS, Motorola 88K, PowerPC, and SuperH) and surrounding hardware components such as framebuffers, interrupt controllers, busses, disk controllers, and serial controllers. The emulation is working well enough to allow several unmodified "guest" operating systems to run.
По сути это такой сильно разросшийся «pet project», созданный одним энтузиастом ради эмуляции особо редких систем:
Простым обывателям из этого списка знакомы наверное только игровые платформы, в лучшем случае еще «малинка» (Rastberri Pi) а про некоторые особо редкие не знал даже автор, так что будут еще изыскания и эксперименты, посвященные этому удивительному проекту.
Сборка
К сожалению эмулятор достаточно давно не развивается, его последняя релизная версия 0.7.0 была выпущена в далеком уже 2021м году и содержала лишь мелкие исправления. Поэтому есть определенные проблемы со сборкой в современном окружении, которые опять придется исправлять вручную.
В этот раз все действия производились на обычном Mageia Linux, без BSD и прочих изысков, с использованием стандартного GCC:
This should work on most Unix-like systems, with few or no modifications to the source code. The basic requirement is a reasonably modern C compiler (C99).
Эмулятор написан все же на C++ а не на чистом С, поэтому для сборки требуется компилятор C++, который ныне устанавливается отдельным пакетом.
Но в остальном автор не врет:
GXemul does not require any additional third-party libraries to build.
И проект действительно не использует никаких внешних библиотек. Кроме X11, ради эмуляции графического экрана:
X11 headers and libraries: for graphical framebuffer emulation.
Так что ничего дополнительно устанавливать не придется.
С версии 0.6 разработка переехала на Github, откуда мы и заберем последние правки исходников (ветка master):
Главная проблема с этим эмулятором — неправильная работа с некоторыми эмулируемыми ОС без специального ключа сборки --debug:
When compiling on Linux via a modern GCC please bear in mind that the emulator wont work correctly if compiled with -O optimization flags. Please use -debug configure option to disable such optimization
Что выяснилось далеко не с первой попытки.
Изучаемая OSF/1 как раз из числа проблемных, поэтому попытка запуска в версии эмулятора, собранного без этого волшебного ключа выдает kernel panic:
Теперь вы тоже видели как выглядел kernel panic в 1992м, поздравляю.
Согласно официальному описанию, ключ --debug всего лишь отвечает за отладочную сборку:
configure for a debug build (turn off optimizations)
На практике все несколько сложнее и этим ключом помимо отключения оптимизаций, еще собирается отдельный оконный отладчик. Чтобы не вводить параметр каждый раз, я прописал в начале скрипта configure вот такой параметр:
DEBUG=YES
Скрипт кстати не из известного пакета autotools а полностью собственной разработки. После каждой правки configure скрипта или шаблонов Makefile.skel (см. ниже) необходимо перезапускать настройку вызовом:
./configure
Теперь запускаем make для запуска сборки и ждем приключений.
Первая ошибка не заставит себя ждать:
Связана она с изменениями в спецификации самого языка C++ и по-хорошему стоило бы эту логику переделать. Но поскольку это не мой личный проект, пошел по пути упрощения — просто переключив используемую версию спецификации при сборке.
Файл, в котором появляется эта ошибка, включается в сборку только при ключе --debug , так что без него вы эту ошибку вообще не увидите.
В файле src/main/Makefile.skel в конец значения параметра CXXFLAGS необходимо дописать указание на версию спецификации --std=c++14:
В этот раз сборка должна завершиться успешно и в корне проекта появится бинарник gxemul:
Запуск
К сожалению не удалось найти установочный диск OSF/1, поэтому я использовал готовый образ диска, в котором ОС уже была развернута.
Взят он был отсюда, также продублирован в нашем Телеграм-канале, если владелец сайта вдруг решит заблокировать доступ.
Команда запуска выглядит так:
./gxemul -e 3max -X -d osf1_mips.img -j vmunix
Где -e 3max указание на тип эмулируемой машины, 3max это например DECstation 5000/200 (3MAX):
Ключ -X указывает использовать графический фреймбуфер, без него вы не увидите графического приглашения. Ключ -d указывает на путь к образу диска (в архиве по ссылке выше) а вот -j это уже особая уличная магия:
-j name set the name of the kernel;
for DECstation emulation, this passes the name to the bootloader, for example: --j netbsd (NetBSD/pmax)
-j bsd (OpenBSD/pmax)
-j vmsprite (Sprite/pmax)
-j vmunix (Ultrix/RISC)
Войти в систему можно под учетной записью root с паролем Jaguar64.
Новый пользователь создается в терминале xterm, с помощью команды adduser:
Изменить пароль можно стандартной командой passwd.
Сеть
Разумеется без поддержки сети толку от такой эмуляции было бы немного. К счастью эмулятор сделает за вас большую часть работы по пробросу сети в эмулируемую систему (сторону хоста) — сам поднимет виртуальный интерфейс, назначит IP‑адрес и даже выставит DNS.
Вам остается только вторая половина — настроить сеть в системе 1992 года.
Как уже описал выше, эмулятор сам создает виртуальный сетевой адаптер, который со стороны гостевой OSF/1 называется ln0.
Должна отрабатывать команда:
ifconfig ln0
В выводе должно быть видно текущее состояние адаптера.
Также эмулятор самостоятельно создает исходящий адаптер с IP-адресом 10.0.0.254, который также является маршрутизатором.
Эти детали отображаются в консоли при запуске эмулятора:
The installed MIPS C compiler is good enough to compile some basic things, and gcc 2.9.5 should compile fine. Apparently binutils is broken, but ld is installed anyway.
Думаю реальная проблема в лицензиях, которые в те времена выдавались на компиляторы в коммерческих UNIX-системах.