diff --git a/post/rozvidka-boyem-xash3d-fwgs-half-life-v-haiku-os.md b/post/rozvidka-boyem-xash3d-fwgs-half-life-v-haiku-os.md new file mode 100644 index 0000000..4c3f7b7 --- /dev/null +++ b/post/rozvidka-boyem-xash3d-fwgs-half-life-v-haiku-os.md @@ -0,0 +1,106 @@ +# Розвідка боєм: Xash3D (FWGS) / Half-Life в Haiku OS + +Давно з цікавістю приглядаюсь до проєкту вільної операційної системи [Haiku](https://www.haiku-os.org), але досі не було вагомих причин її спробувати. Після Linux, Windows і MacOS я не дуже розумів її нішу. Останнім часом, через перебої світла, перебрався на нетбук з 7 Гб оперативної пам'яті і серйозно "вдарився" в оптимізацію енерго-споживання. + +Серед такої оптимізації, було й вимкнення шару `zram`, а звідти - відмова від "товстого" `swap`, що зкорочує термін служби SSD. Якщо на нетбуці 7 Гб це ще прийнятно, то робоча станція з 3 Гб максимум (4-1) вже занадто. Було прийнято рішення спробувати Haiku у якості основної системи. + +## Системні особливості Haiku + +Найкращий спосіб зорієнтуватись в новій системі - це мабуть спробувати встановити в неї потрібну тобі програму. Оскільки я займаюсь розробкою і майже все збираю з сорсу (це в більшості C++), вирішив зібрати першим щось "не тривіальне": наприклад, олдовий ігровий рушій [Xash3D/FWGS](https://github.com/FWGS/xash3d-fwgs) і запустити на ньому першу [Халфу](https://store.steampowered.com/app/70/HalfLife/). + +Кому цікаві інструкції в контексті Linux, то вам сюди: +* [Half-Life в Linux на базі рушія Xash3D/FWGS](https://devzone.org.ua/post/half-life-v-linux-na-bazi-rushiia-xash3dfwgs) + +### Архітектура + +Класично, Half-Life є 32-бітною грою. Спочатку, я спробував встановити [Haiku 32 біт](https://mirrors.rit.edu/haiku/r1beta5/haiku-r1beta5-x86_gcc2h-anyboot.iso), але система в мене не запустилась а ні на віртуалці QEMU, а ні на "залізі". Тому я все ж [поставив 64 біт](https://mirrors.rit.edu/haiku/r1beta5/haiku-r1beta5-x86_64-anyboot.iso) і нижче будуть інструкції саме для цієї архітектури. + +### Командний рядок + +На моє здивування, на відміну від вже екзотичного сьогодні UI, CLI - дуже нагадує Linux, зокрема за рахунок спільного [cureutils](https://uk.wikipedia.org/wiki/GNU_Core_Utilities): наявність стандартних команд не дадуть заблукати. + +В меню програм є Термінал, але можливо вам також стане в нагоді гайд з підключення до хосту через SSH (адже якщо користуватись [virt-manager](https://virt-manager.org/), то там буфер обміну не працюватиме) + +* 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` мене погнала шукати віруси і як виявляється, я пропустив анонс [першого такого](https://github.com/Siradankullanici/HaikuRansomware ) в 2024 році. + +## Збірка 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 +``` + +Детальніше про `rad`, читайте тут: [Radicle: децентралізований P2P хостинг Git/DVCS](https://devzone.org.ua/post/radicle-detsentralizovanyy-p2p-khostynh-gitdvcs). Для мене Radicle цікавий тим, що дозволяє контролити апдейти без перезаливу всього торента. + +Ігрові набори розпаковуються до теки `/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. + +## Дивіться також + +* [Haiku port #9](https://github.com/FWGS/xash3d-fwgs/issues/9) \ No newline at end of file