unix
August 13, 2023

NetBSD в деле

Как я уже писал, давно использую эту ОС на практике, поэтому есть что рассказать.

Все такое красивое и необычное, снова и опять да.

На данный момент NetBSD 9.3 стоит на реальном железе, не в виде виртуальной машины, на ноутбуке Lenovo T440, достаточно старом для таких экспериментов.

Имейте ввиду, что NetBSD это максимально далекая от обычного пользователя ОС, поэтому ставить ее на голое железо (тем более свежее) — дело крайне рисковое и наивное.

Еще у вас точно должен быть серьезный опыт и с Линуксами и с куда более «пользовательской» FreeBSD, прежде чем лезть в это.

Suspend/Resume

Внезапно это работает, но по-особенному.

Дело в том что из системы убраны все клиентские утилиты и обвязка по управлению засыпанием, нет acpiconf, нет zzz, нет rc.suspend и rc.resume, уже привычных по FreeBSD.

В NetBSD оставили только голый sysctl:

sysctl -w hw.acpi.sleep.state=3

Вызов которого я и закатал в кастомный аналог zzz:

cat /usr/bin/zzz
#!/bin/sh
sysctl -w hw.acpi.sleep.state=3

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

Заряд батареи

Индикацию заряда батареи получить также непросто, пришлось написать еще один скрипт:

cat /opt/own/bin/acpi_stat 
#!/bin/sh
/usr/sbin/envstat -d acpibat0
/usr/sbin/envstat -d acpibat1

На моем ноутбуке две батареи, поэтому тут два вызова, вам скорее всего хватит одного (первого).

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

В принципе информации достаточно, но конечно выглядит не так красиво как иконка с индикатором.

Обновления и пакеты

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

Установка из пакета:

pkgin install mc

Обновление всех пакетов:

pkgin upgrade

Обновление самой системы происходят по аналогии с OpenBSD, уж не знаю кто у кого взял идею, с ключевым отличием что в NetBSD есть «автоматический режим»:

sysupgrade auto

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

Что такое WIP

В NetBSD и OpenBSD существуют неофициальные наборы частично работающего софта, которые называются WIP, сокращение от фразы «Work-In-Progress» («Ведутся работы»).

Для NetBSD это выглядит вот так.

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

Именно так я совсем недавно заставлял работать свежую версию KDE, до ее нормальной поддержки а сейчас работаю над сборкой chromium и telegram-desktop.

Разборки с Intellij Idea

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

Но это на самом деле лишь начало, первое что вы увидите попытаясь запустить идею под NetBSD будет вот такое маловразумительное сообщение:

[alex@caramba:/opt/app/idea-IC-232.8660.185]$ ./bin/idea.sh 
Error calling StartServiceByName for org.freedesktop.Notifications: Process org.freedesktop.Notifications received signal 11

Проблема заключается в удивительном факте:

для отображения сообщения об ошибке на стадии логики скрипта запуска (т.е еще до старта Java), используется система показа оповещений, завязанная на Dbus.

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

Поэтому устанавливаем notifyd:

pkgin install xfce4-notifyd

и запускаем (в сессии пользователя):

Теперь наконец можно увидеть настоящую ошибку:

Вот оно что, в окружении не нашлась одна из утилит, типичных для более обычных ОС.

Но в системе она все равно есть, просто в нестандартном месте, поэтому докручиваем переменную PATH:

export PATH=/usr/pkg/gnu/bin:$PATH

В этот раз все должно получиться, не забудьте только поставить свежую JDK:

pkgin openjdk17

и прописать путь в окружении:

export JAVA_HOME=/usr/pkg/java/openjdk17/

Все работает достаточно стабильно, можно пользоваться: