[О блоге] [index] [пред] [2021-04-14 13:12:57+03:00] [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. Но сам не пробовал ни разу.