- комментарий 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. Но сам не пробовал ни разу.