gemlog/public/uk/build-xash3d-fwgs-half-life-on-haiku-os.gmi
2026-02-17 12:36:39 +02:00

116 lines
No EOL
8.2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Розвідка боєм: Xash3D (FWGS) / Half-Life в Haiku OS
Давно з цікавістю приглядаюсь до проєкту вільної операційної системи Haiku, але досі не було вагомих причин її спробувати. Після Linux, Windows і MacOS я не дуже розумів її нішу. Останнім часом, через перебої світла, перебрався на нетбук з 7 Гб оперативної пам'яті і серйозно "вдарився" в оптимізацію енерго-споживання:
=> power-optimization-on-linux.gmi Оптимізація енергоспоживання в GNOME / Linux
Серед такої оптимізації, було й вимкнення шару zram, а звідти - відмова від "товстого" swap, що зкорочує термін служби SSD. Якщо на нетбуці 7 Гб це ще прийнятно, то робоча станція з 3 Гб максимум (4-1) вже занадто. Було прийнято рішення спробувати Haiku у якості основної системи.
## Системні особливості Haiku
Найкращий спосіб зорієнтуватись в новій системі - це мабуть спробувати встановити в неї потрібну тобі програму. Оскільки я займаюсь розробкою і майже все збираю з сорсу (це в більшості C++), вирішив зібрати першим щось "не тривіальне": наприклад, олдовий ігровий рушій Xash3D/FWGS і запустити на ньому першу Халфу.
Кому цікаві інструкції в контексті Linux, то вам сюди:
=> half-life-on-linux-using-xash3d-fwgs-engine.gmi Half-Life в Linux на базі рушія Xash3D / FWGS
### Архітектура
Класично, Half-Life є 32-бітною грою. Спочатку, я спробував встановити Haiku 32 біт, але система в мене не запустилась а ні на віртуалці QEMU, а ні на "залізі". Тому я все ж поставив 64 біт і нижче будуть інструкції саме для цієї архітектури.
### Командний рядок
На моє здивування, на відміну від вже екзотичного сьогодні UI, CLI - дуже нагадує Linux, зокрема за рахунок спільного cureutils: наявність стандартних команд не дадуть заблукати.
В меню програм є Термінал, але можливо вам також стане в нагоді гайд з підключення до хосту через SSH (адже якщо користуватись virt-manager, то там буфер обміну не працюватиме)
=> https://www.haiku-os.org/guides/daily-tasks/netservices/
=> https://www.haikuinsider.org/ssh-server
### Пакетний менеджер
Пакетний менеджер в Haiku називається `pkgman`, він використовується для встановлення програм замість `apt` (Debian) і `dnf` (fedora). Особисто я конвертую залежності в README череш ШІ, це досить зручно:
``` bash
pkgman install libsdl2_devel freetype_devel opus_devel bzip2_devel libvorbis_devel
```
* звісно, є інші залежності, але вони в мене були встановлені з коробки
Як бачимо, `sudo` в Haiku не використовується, бо це система для одного користувача. Це мені навіть сподобалось, бо чесно признатись, вже втомився від постійних вводів паролів та перемикання між юзерами системних служб (Linux - все таки, серверна платформа).
Само собою, відсутність `root` мене погнала шукати віруси і як виявляється, я пропустив анонс першого в 2024 році:
=> https://github.com/Siradankullanici/HaikuRansomware World's First Haiku Ransomware/Malware
## Збірка Xash3D / FWGS
Збірка рушія відбувається так само, як і на Linux, але мені довелося зробити невеличкий патч:
=> https://github.com/FWGS/xash3d-fwgs/pull/2459)
``` bash
git clone --recursive https://github.com/YGGverse/xash3d-fwgs.git
git checkout oooo-ps-patch-1
cd xash3d-fwgs
```
Якщо на момент читання патч вже змержили до апстріму:
``` bash
git clone --recursive https://github.com/FWGS/xash3d-fwgs
cd xash3d-fwgs
```
Перед компіляцією, потрібно ще в двох файлах руками виправити типізацію Ogg/Vorbis API. Руками, тому що це "брудне" рішення у вигляді касту, замість вирішення конфліктів залежностей і я не планую з цього робити RC. Шукаємо і додаємо префікс:
* `FS_SeekOggVorbis` -> `(void *) FS_SeekOggVorbis`
* `OggFilestream_Seek` > `(void *) OggFilestream_Seek`
Тепер можна збиратись:
``` bash
./waf configure
./waf build
./waf install --destdir=/path/to/valve-root
```
### Встановлення ігрових наборів
Ігрові набори Half-Life потрібно придбати:
=> https://store.steampowered.com/app/70/HalfLife/
Або скачати, наприклад з торентів або Radicle/Git:
```
git clone https://iris.radicle.xyz/z3LRRg2os4mihf6n12P6m2Ukr4BfW.git half-life-steam-id-70
```
Детальніше про Radicle, читайте тут:
=> radicle-is-decentralized-p2p-git-dvcs.gmi Radicle: децентралізований P2P хостинг Git/DVCS
* для мене Radicle цікавий тим, що дозволяє контролити апдейти без перезаливу всього торента
Ігрові набори розпаковуються з розташування профілю Steam до теки `/path/to/valve-root/valve`.
### Portable Half-Life SDK
Для запуску на альтернативних архітектурах, потрібно додатково зібрати певні залежності:
``` bash
git clone --recursive https://github.com/FWGS/hlsdk-portable.git
git checkout bot10
cmake -B build -S .
cmake --build build
```
Які саме залежності потрібно зкопіювати до `valve` (з теки `build`) - буде вказано в помилці запуску гри. В мене це були файли:
* `valve/dlls/hl_haiku_amd64.so`
* `valve/cl_dlls/client_haiku_amd64.so`
## Тестування
Перший запуск (бінарником `./xash3d`) в мене відбувся. Утім, гра сильно гальмувала на віртуалці QEMU, через що я згодом поставив Haiku вже на фізичне залізо аналогічної архітектури: просто зкопіював збірку флешкою, довстановивши на новій машині залежності `*-devel`.
Гра запустилась і там. Хоч на фізичному залізі вона працює швидше, утім тут явно не вистачає якогось драйвера (хоча система й автоматично підтягнула OpenGL) або ж він працює не коректно. Спробую згодом ще на зовнішній відео-картці, хоча на форумах повідомляють про окремі проблеми з чіпсетами Radeon.
## Посилання
=> https://www.haiku-os.org
=> https://github.com/FWGS/xash3d-fwgs/issues/9 Haiku port #9