[Перевод] Очень странные дела. Что спрятано под капотом FreeDOS в современном ноутбуке

9soefma7ojasusiza7c7b7p5_do.jpeg
HP Zbook Fury 17.8 G8 в режиме FreeDOS из коробки

Чтобы сэкономить на лицензии, производители компьютеров часто предлагают «голый» вариант техники без операционной системы. Но совсем без системы продавать нельзя, потому что это может нарушать законодательство (такой компьютер не выполняет заявленные функции, то есть не соответствует характеристикам). Поэтому они делают ход конём — ставят какую-нибудь бесполезную систему чисто для юридических формальностей. Нет, нормальный Linux они тоже ставят. Но кроме него зачем-то ещё и другой вариант.

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

Разработчик компьютерных игр и специалист по виртуализации Linux Хайн-Питер ван Браам-Стюарт решил разобраться и посмотреть, что скрывается под капотом современного ноутбука HP ZBook 17.8 G8. Это оказалось как раз из его профессиональной области (извините за спойлер…).

Итак, слово автору…


Расскажу о некоторых странных вещах в компьютере с FreeDOS от Hewlett Packard. Подозреваю, что многим читателям не слишком интересны эти подробности, но лично я получил большое удовольствие. Возможно, вы тоже найдёте здесь что-то смешное.

Немного предыстории: недавно я купил ноутбук HP ZBook 17.8 G8. Но поскольку сам пользуюсь Fedora Linux, то решил немного развлечься с операционками — и при покупке выбрал вариант FreeDOS (там есть и другие варианты, включая Ubuntu и различные версии Windows 11).

q0ldvpznpfoy5fsomje8ja5kz6s.png

Ну и конечно, после распаковки и включения ноутбука меня встретила радостная картинка на КДПВ.

vfodvbxi2bclqoobalek499ckjw.png

Во-первых, это очень старая версия FreeDOS. Но ещё интереснее длительное время загрузки. Уверен, при загрузке там что-то мигало, подозрительно напоминая некоторые сообщения ядра Linux. Поэтому перед установкой Fedora Workstation я сделал точную копию HDD. На диске оказалось три раздела:


Всё это совсем не похоже на систему DOS… Похоже, HP на самом деле ставит на диск Linux, а затем запускает DOS в виртуальной машине. Давайте попробуем загрузить всё это в виртуальной машине и посмотрим, что получится.

ch246gmg_vzipfw-yfprt0ioncm.png

wlvksnfcjyxc1oahiucrwvusyd8.png

mlgk1lvorxon8h26_oqc2yzwbhw.png

-9emf-jjmkc8gdowe7vromacv1g.png

Как видите, ссылка на документацию запускает какой-то PDF-ридер. Документ на последнем скриншоте начинается словами «Компьютер оборудован операционной системой FreeDOS, которая предоставляет только ограниченную функциональность». Что ж, с этим сложно спорить.

l3ilz-yfhzimwqbayj4hmzhfswu.png

Но самое интересное, что на диске установлены ещё как минимум две другие ОС. Я говорю «как минимум», потому что в реальности на этом компьютере ТРИ операционные системы!


Мы изучили содержимое образа. Теперь посмотрим, как загружается система.

# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"


Похоже, на диске лежит дистрибутив Debian GNU/Linux 9. После небольшого расследования выяснилось следующее:

  • Ноутбук загружает прошивку UEFI, из которой запускается стандартный GRUB
  • Debian загружается с отключенной KMS, а также со всеми DRM-драйверами
  • После загрузки системы запускается Gnome Display Manager
  • GDM автоматически регистрирует пользователя root и запустит /root/.xsession
  • XSession из терминала XFCE запускает Qemu на образе в /home/aos/qemu


Ниже скопирована настоящая /root/.xsession:

#!/bin/bash

xfce4-terminal --zoom=-7 --geometry=1x1 --fullscreen --hide-toolbar --hide-menubar --hide-scrollbar --hide-borders -e "bash -c 'sleep 2 && xdotool search --name QEMU windowsize 100% 100% && xdotool search --name QEMU windowsize 100% 100%  && xdotool search --name QEMU windowsize 100% 100%  && xdotool search --name QEMU windowsize 100% 100% &  qemu-system-x86_64 -smp cores=8 --enable-kvm -m 2048 -vga cirrus -hda /home/aos/qemu/freedos.img -usbdevice tablet -usb -device usb-host,hostbus=2,hostaddr=1 -monitor telnet:127.0.0.1:9378,server,nowait && poweroff -f  ; exec bash'" >/dev/null 2>&1
poweroff -f
#xfce4-terminal --fullscreen --hide-toolbar --hide-menubar --hide-scrollbar --hide-borders


Это… интересный подход. Возможно, необходимый, потому что в X-сессии не запускается оконный менеджер. В этом случае Xdotool несколько раз пытается изменить размер окна Qemu, чтобы оно покрыло всю X-сессию. Видимо, после тестирования разработчики решили, что трёх раз будет достаточно.

По сути, этот скрипт делает следующее:

  • Запускает терминал XFCE, скрывая весь его UI
  • Запускает двусекундный таймер и ждёт
  • В это время запускает виртуальную машину Qemu
  • По истечении двухсекундного интервала ищет окно Qemu и пытается изменить его размер, чтобы оно заполнило весь экран. Делает это три раза на случай, если с первого раза не получилось
  • После выхода из Qemu выключает компьютер


На этом этапе стоит упомянуть, что меню FreeDOS/HP Documentation запущено внутри виртуальной машины Qemu. Настоящий загрузчик (grub) не предлагает вариантов выбора и всегда загружает Debian 9.

Что это за «Документация HP»? Неужели они используют DOS PDF Reader? Ну, есть только один способ узнать. Нужно спуститься НА УРОВЕНЬ ГЛУБЖЕ (в /home/aos/qemu/freedos.img).

# fdisk -l freedos.img 
Disk freedos.img: 2 GiB, 2150400000 bytes, 4200000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device       Boot   Start     End Sectors  Size Id Type
freedos.img1         2048 2007039 2004992  979M  b W95 FAT32
freedos.img2 *    2007040 4192255 2185216    1G  b W95 FAT32


Похоже, у нас два раздела… Погодите, здесь есть диски C: и D:?

Помните, я говорил про три операционные системы? Так вот, я соврал. Их четыре. Файл freedos.img на самом деле содержит ДВЕ отдельные установки FreeDOS, хотя с одинаковой версией.


После извлечения содержимого двух разделов FAT32 обнаружилось следующее:

  • В образе лежит дистрибутив syslinux
  • Первый вариант — цепочка загрузки во FreeDOS на первом разделе
  • Второй вариант — другой Linux со второго раздела
label dos
        menu label ^FreeDOS
        menu default
        com32 chain.c32
        append hd0 1

label live
        menu label ^HP Documents
        kernel /live/vmlinuz
        append initrd=/live/initrd.img boot=live config homepage=file:///hpdocs/platform_guides/languages/index.html nonetworking nopersistent quickreboot nomodeset radeon.modeset=0 nouveau.modeset=0 i915.modeset=0 username=webc video=vesa apm=off novtswitch pnpbios=off acpi=off nomce loglevel=3 libata.force=noncq quiet splash noroot novtswitch


Похоже, этот Linux живёт в директории /live c файловой системой squashfs. Ну… давайте проверим. Действительно, во втором разделе находим /live/filesystem.squashfs — никакого бонуса за креатив.

Похоже, большинству файлов тут несколько десятилетий… так что удобного отчёта /etc/os-release ожидать не приходится. Зато есть /etc/debian_version, в то время как ubuntu_version отсутствует.

# cat debian_version 
6.0.3


Похоже, у нас 32-разрядный дистрибутив Debian 6.0.3. Судя по release notes, он датируется 8 октября 2011 года.
Похоже, в наши ручки попал ещё один объект для препарирования. Теперь это дистрибутив Debian 6.0.3, задача которого — показывать «полезный» PDF с информацией, что ПК бесполезен в заводской конфигурации. Судя по всему, в данном случае сценарий такой:

  • Debian загружается почти как обычно, отключены все видеовыходы с аппаратным ускорением, активирован драйвер VESA
  • Файл /etc/rc.local ищет раздел с меткой HPDOCS и монтирует его в /hpdocs. Если не может найти, то монтирует в /hpdocs любой /dev/sda1.
  • Запускается служба под названием 'Webconverger'. Видимо, это старый проект в стиле «Превратить Debian в веб-киоск» (ссылка на Archive.org)


Webconverger делает ещё пару вещей:

  • Настраивает X-сервер
  • Устанавливает домашнюю страницу iceweasel в соответствии со значением из конфигурации pxelinux выше
  • Устанавливает громкость звука на 100% (ой)
  • Засыпает на 10 секунд, затем переключаетсяся между виртуальными терминалами 1 и 2


При покупке компьютера HP с FreeDOS вы получаете следующее:

  • установленный Linux загружает виртуальную машину
  • эта виртуальная машина загружает либо старую версию FreeDOS, либо…
  • … старую версию Linux в режиме киоска


Судя по всему, установленный образ FreeDOS совсем негодный. Нет, я особо ничего не ожидал… просто думал запустить хотя бы Duke Nukem 3D на голом железе с заводской ОС.

По датам и набору файлов можно предположить, что содержимое freedos.img когда-то ставилось на реальное железо. Когда вошли в обиход диски NVME и другие современные аппаратные стандарты, наверное, образ перестал загружаться. Вместо обновления образа решили создать слой VM, и старый заводской образ просто включили в новый. На самом деле не такое и ужасное решение.

Хотя кому-то в HP действительно нужно узнать, зачем нужны менеджеры окон в X11. Ну или пишите мне на почту, что-нибудь придумаем.

В завершение обзора — пару видеороликов с различными вариантами загрузки ноутбука из коробки.

Загрузка из исходного образа в DOS

Загрузка из исходного образа в экран «Документация»

© Habrahabr.ru