[5f7a9d8bfddee6ce532852890721144bb10b7ac9] #bsd #fun 

Что же FreeBSD не умеет?

https://www.opennet.ru/opennews/art.shtml?num=54962
В одном комментарии кто-то, видимо, хотел постебаться и задал вопросы о
FreeBSD:

    вайн работает?
    нвидиа блобы есть?
    hdmi второй монитор динамически умеет подхватывать?
    звук через hdmi гоняет?
    компиз работает?
    набор системных утилит гуишных есть?
    ютубчег аппаратно декодирует?
    засыпать и хибернейт умеет?

Что забавно, но даже я в курсе того что всё это есть и на всё ответ
утвердительный. Правда даже примерно не помню что такое "компиз", кроме
того что это что-то с графикой связано. А WineHQ, HDMI+звук, аппаратное
декодирование видео у меня на текущей системе работало. А засыпать оно
умело, но на текущей системе мне это просто не нужно.

Кто-то ещё спросил про Bluetooth. Не знаю как сейчас, но я и звук и PAN
гонял по нему между FreeBSD системами когда-то.

[оставить комментарий]
комментарий 0:
From: kmeaw
Date: 2021-04-14 21:16:03Z

Из того, чем пользуюсь я хотя бы раз в неделю на своих машинах, и чего,
вероятно (я не проверял) FreeBSD не умеет:

    docker[5]
    systemd[4]
    ixgbe с несколькими очередями и VF
    kexec
    WireGuard (хотя, наверное, есть userspace-версия)
    /proc/$pid/fdinfo[2]
    pulseaudio[6]

Раз в год:

    User-mode Linux
    netns[1]
    qemu-nbd
    /proc/$pid/mem
    macvtap, macvlan[3]
    reptyr

[1] Обычно использую, когда я подключен через Wi-Fi к некоторой сети с
интернетом, а мне принесли сетевую железку, IP-адреса которой
конфликтуют с адресами этой сети, и мне надо иметь обе сети
одновременно.

[2] Когда запустил какую-то длительную операцию, линейно
читающую/записывающую файл, и хочу понять, долго ли мне ждать её
завершения.

[3] Когда хочу запустить что-то в контейнере или виртуалке, подключив её
к той же сети, где нахожусь я сам, но лень настраивать bridge, ведь для
этого придётся перевешивать IP на новый интерфейс. А удалённо этого
особенно не хочется делать без OOB-консоли под рукой.

[4] Часто использую в качестве супервизора для своих мелких программ,
предназначенных для решения очень узкой задачи, полезной на одной машине.
Мне нужны следующие фичи: перезапуск в случае падения, логирование
stdout/stderr, socket activation, readiness notification, чтение
секретов из файла в environment перед запуском. Хорошо иметь private
/tmp, всегда чистую runtime directory на момет запуска, DynamicUser.

[5] Использую для сборки своих программ в чистом окружении (хотя бы для
того, чтобы сильно снизить вероятность того, что я забыл
задокументировать какую-нибудь зависимость) и для запуска с целью
изучения возомжностей какого-нибудь комплекса программ, который
замучаешься настраивать при развёртывании классическим образом.

[6] Использую для смешивания аудиопотоков из разных программ с
запоминанием уровней громкости/захвата; для сетевой прозрачности
звуковых устройств. Раньше использовал esd (без фичи с запоминанием),
потом перешёл на pulseaudio ради шестиканального звука.

Интересно, как выглядят FreeBSD-аналоги для всего этого?
комментарий 1:
From: Sergey Matveev
Date: 2021-04-15 09:50:01Z

*** kmeaw [2021-04-15 00:14]:
>    docker[5]

Вроде где-то слышал что его хотели подружить с jail-ами чтобы всё в
native режиме могло работать. Но сам не интересуюсь ни им, ни его делами
в FreeBSD, так что не знаю. https://wiki.freebsd.org/Docker использует
эмуляцию Linux, но не знаю насколько это всё работоспособно.

>    systemd[4]

Из коробки в голой FreeBSD подобного нет. daemontools многие фичи
предоставляет: перезапуск, логирование, секреты в env. Socket activation
можно скриптами сэмулировать. Readiness notification, чистые chroot-ы
как-то надо через что-то "эмулировать". Но я и с damontools познакомился
-- возможно какие-нибудь более продвинутые runit или другие системы
могут это всё из коробки.

Но да, это не будет systemd конечно же. Лично я рассматриваю systemd как
совершенно иную от Unix-like экосистему. Точно так же как Android далёк
от Debian, хоть он и "линукс же", так же и systemd далёк от Unix-like мира.

>    ixgbe с несколькими очередями и VF

Тут ничего не смогу прокомментировать. То что драйверы Intel сетевух
поддерживают несколько очередей и их можно "разбрасывать" по
ядрам/процессорам то это точно, но про VF не в курсе.

>    kexec

Этого нет. Хотя у кого-то было желание реализовать https://wiki.freebsd.org/Kload

>    WireGuard (хотя, наверное, есть userspace-версия)

Да, userspace работает без проблем.

>    /proc/$pid/fdinfo[2]

Не уверен полноценные ли это аналоги друг другу, но вроде вывод, как
минимум, "procstat -f" содержит аналогичную информацию:

    % procstat -f `pgrep vim`
      PID COMM                FD T V FLAGS    REF  OFFSET PRO NAME
    21068 vim               text v r r-------   -       - -   /usr/local/bin/vim
    21068 vim               ctty v c rw------   -       - -   /dev/pts/4
    21068 vim                cwd v d r-------   -       - -   /home/stargrave
    21068 vim               root v d r-------   -       - -   /
    21068 vim                  0 v c rw------   9 5286954 -   /dev/pts/4
    21068 vim                  1 v c rw------   9 5286954 -   /dev/pts/4
    21068 vim                  2 v c rw------   9 5286954 -   /dev/pts/4
    21068 vim                  3 v r r-------   2    3640 -   -
    21068 vim                  4 s - rw---n--   1       0 UDS 0 0 /tmp/.X11-unix/X0
    21068 vim                  6 v r rw------   1   12288 -   /home/stargrave/secure/vim/tmp/mutt-stargrave-1001-93305-15353379845003566146.swp

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

>    pulseaudio[6]

Да, под FreeBSD есть давным давно и именно поэтому всякий софт, который
только с PulseAudio работает для вывода звука, может работать и под
FreeBSD. Просто вместо ALSA/whatever использует OSS backend.

>    User-mode Linux

Такого нет. Запускать разные дистрибутивы FreeBSD ± можно, но всё под
одним ядром. У меня 12.0 (видимо скоро 13.x будет) рулит 11.x Jail-ом,
давно не обновлявшимся. Но разные ядра не запустить, разве что
использовать "полноценную" виртуализацию типа bhyve, которая изначально
буквально только и позволяла что отдельной командой загрузить ядро,
отдельной командой уже его стартовать с предоставленными устройствами
виртуальной машины.

>    netns[1]

В FreeBSD есть setfib (ну и понятие FIB-а) -- который позволяет делать и
применять разные таблицы маршрутизации. Это, насколько понимаю, только
подмножество возможностей netns. Но иметь полностью отдельный сетевой
стэк можно через Jail с VIMAGE фичей (которая сейчас в ядрах по
умолчанию включена).

Вопрос удобства и аналогии конечно под вопросом при сравнении netns, но
если используется ZFS, то создать новый jail с полным готовым для работы
chroot-ом можно за секунду через zfs clone, как и запустить после этого
сразу же и jail. Я именно так создавал себе несколько jail-ов со своими
сетевыми стэками чтобы проверять IPsec работу. У меня есть
zroot/jails/skel dataset который я клонирую для моментального получения
нового свеженького jail-а.

Но вашу задачу с конфликтующими IP-адресами можно вроде бы и с помощью
setfib-а решить. К сожалению, самому на практике с FIB-ами не приходилось
играться, только слышал о них и читал примеры:
https://blog.tyk.nu/blog/freebsd-multiple-lte-modems-ppp-and-multi-fib-on-apu3c4/

>    qemu-nbd

Точно помню что приходилось иметь дело с NBD под FreeBSD. Даже не
вспомню где и когда, но NBD знаком. Да и Wikipedia говорит что оно под
FreeBSD есть (через GEOM подсистему, как и полагается):
https://en.wikipedia.org/wiki/Network_block_device
https://github.com/freqlabs/nbd-client

>    /proc/$pid/mem

Не знаю аналогичны ли /mem в Linux и FreeBSD, но оно есть в последней,
как и /map: https://nixdoc.net/man-pages/FreeBSD/man5/procfs.5.html
Сам ещё никогда не пользовался подобным.

У меня вообще ощущение что впервые я начал программировать только в
прошлом году, когда взял в руки Си, а узнавать Unix только когда для
своего блога не смог сделать setuid/setgid чтобы он мог писать
комментарии в git-репозиторий.

>    macvtap, macvlan[3]

Даже не слышал про такие штуки. С ходу и не припомню есть ли аналоги в
FreeBSD. Может быть из командной строки можно netgraph-ами это
наворотить -- тут совершенно ещё не в теме и не силён.

Лично я поэтому на ноутбуке и серверах штатно стараюсь иметь bridge
интерфейс, как-раз чтобы, если что, можно к нему было добавить
какой-нибудь TAP. Но понимаю что неприятно если нет OOB связи, а bridge
ещё не существует с нужным адресом. В FreeBSD с bridge-ом была ещё и
другая проблема: он работает только с одним ядром и поэтому можно было
просто тупо упереться в его производительность, которая не
масштабировалась на несколько процессоров. Недавно это начали
исправлять: https://freebsdfoundation.org/blog/500-if_bridge-performance-improvement/

>    reptyr

Ну у него в документации сказано что на FreeBSD должно работать. Лично я
то просто привычку уже имею всюду всегда и везде работать под tmux-ом,
чтобы не думалось про возможность отключения.
комментарий 2:
From: Sergey Matveev
Date: 2021-04-15 10:14:14Z

Заголовком "Что же FreeBSD не умеет?" я конечно же не хотел сказать что
она "умеет всё". Само собой 100500 вещей в ней не предусмотренных. И я
помню что с завистью посматривал на что-то в NetBSD/OpenBSD.

Каждая ОС имеет свои -specific только для неё фишки. И даже спорно что
можно считать аналогом: вот есть ли в GNU/Linux jail? С одной стороны,
всякие возможности изоляции/виртуализации присутствуют, но под вопросом
могут ли они являться аналогом простоты и удобства jail-ов. Или вот есть
seccomp, который может ограничивать процесс аналогично pledge/capsicum,
но такой ценой трудозатрат, что точно не может быть их аналогом. И
наоборот, само собой. Если кому-то нужен Docker/systemd, то *BSD
наверное не стоит рассматривать. Если кому-то нужен AutoCAD, то и
GNU/Linux наверное отпадает (предполагаю что версий этого ПО для этой ОС
нет). OpenBSD вообще вон выпилила Bluetooth стэк -- кому то это могло
быть критично. А DragonFly BSD выпилила IPsec.
комментарий 3:
From: Sergey Matveev
Date: 2021-04-15 11:33:03Z

>    docker[5]

Ещё вспомнил что есть Bastille: https://bastille.readthedocs.io/en/latest/
очень напоминающая многим Docker. Но сам не пробовал ни разу.