OpenBSD Неофициальный FAQ по мотивам обсуждений на телеграм-канале @openbsd_ru



Зачем нужен ещё один FAQ?

За время существования телеграм-канала @openbsd_ru мы отметили, что у новичков (особенно у тех, кто не знаком с OpenBSD и повседневно использует другие ОС) возникают примерно одни и те же вопросы. Мы постарались собрать их здесь и осветить наиболее полно (насколько это возможно в рамках формата FAQ), дабы не тратить каждый раз время на повторение одних и тех же ответов.

О системе

Почему именно OpenBSD (не Linux, не другие BSD)? Причин множество. Ориентация на подход "безопасность по умолчанию", доступность "из коробки" технологий exploit mitigation (ASLR, W^X, и т.д.), качественная документация, ориентация на написание качественного и переносимого кода. Но главное на наш взгляд - следование "изначальной" UNIX-идеологии. Каждая программа в базовой системе выполняет одну узкую задачу, но делает это хорошо. А также - следование общей простоте и доступности. Не надо искать какие firmware-компоненты требуется загрузить - утилита fw_update делает это автоматически. Если аппаратное устройство поддерживается системой, то оно, как правило, просто работает - без поиска драйверов и модулей (и наоборот - просто не-работает и что-либо искать бесполезно). Wifi настраивается встроенными средствами системы одной строчкой в настройках сетевой карты (а не четырьмя и при помощи стороннего демона wpa_supplicant, как это принято в других популярных Open Source ОС). Продолжать можно долго. В общем это то чего профессиональный специалист по UNIX-системам ожидает от качественной и продуманной UNIX-like ОС.

В FAQ написано подробнее.

Подойдет ли OpenBSD для десктопа? Разработчики OpenBSD много раз отвечали на этот вопрос и ответ всегда был примерно такой: если вам подходит -- то годится. А если вам не подходит -- то извините. Если чуть более развернуто: "десктоп" - понятие абстрактное. Каждый пользователь решает на нём какой-то свой круг задач, и поэтому ответ на этот вопрос можете дать только вы сами и только после личного опыта знакомства с системой. В наше время для этого не нужен даже отдельный компьютер, достаточно популярных бесплатных средств виртуализации (например VirtualBox).
А как вы используете OpenBSD - десктоп, рабочая станция, сервер? Разными способами. И как десктоп/рабочую станцию и как сервер/сетевой шлюз.

Десктоп/рабочая станция - в пакетах есть многие популярные среды рабочего стола, браузеры, среды разработки, opensource программы для работы с документами, редактирования аудио/видео и прочее необходимое на десктопе.

Сервер/сетевой шлюз - в базовой имеется минимальный простой http-сервер (доступный для всех популярных архитектур), dns-серверы unbound, nsd, сервер dhcp.

Через систему пакетов доступен сервер samba, различные сервера баз данных, службы резервного копирования, средства для развертывания LAMP-подобных систем и многое другое.

Также в системе имеется удобный и функциональный файрволл PF.

OpenBSD же про безопасность - почему бы не переписать утилиты базовой системы на rust или ином memory-safe языке? Что касается языка rust - в рассылках OpenBSD есть развернутый исчерпывающий комментарий Тео Де Раадта. Вкратце - как минимум использование rust не решит всех проблем с написанием качественного и безопасного кода, но зато добавит новые. Например - невозможность компиляции для ряда архитектур ввиду потребления большого количества оперативной памяти.
Почему вы используете несвободные firmware и почему бы их не выкинуть/переписать? Зачастую firmware - сложная и большая программа, затраты (финансовые, временные и пр.) на написание которой огромны даже при наличии технической документации на оборудование. И чаще всего - этой документации нет. Что, очевидно, еще более усложняет ситуацию. Для упорно желающих всё же переписать всё под свободной лицензией - предлагаем ознакомиться с комментарием Тео Де Раадта.

Совместимость

Я слышал есть другие BSD - это дистрибутивы одной и той же ОС? Есть ли бинарная совместимость? Нет, это разные операционные системы, с разными ядрами, подсистемами, системными утилитами, набором пакетов и идеологиями. Бинарной совместимости между ними нет.
А как насчет совместимости с линуксом? Есть ли пакет wine? OpenBSD не ставит цели обеспечить бинарную совместимость с Linux-программами. Соотвественно - программы, поставляемые в виде бинарных сборок для Linux, не будут работать в OpenBSD. Средства бинарной совместимости с Linux ранее поддерживались, но были удалены из системы и дальнейшее их развитие не планируется. Тоже самое касается и wine - поставить его не получится.
Интересно. А что с виртуализацией? В OpenBSD имеется собственный гипервизор vmm - аналог линуксового kvm и freebsd-шного bhyve - для которого подтверждена возможность запуска различных дистрибутивов Linux, а также самой OpenBSD. К сожалению vmm не поддерживает вывод с помощью VGA, таким образом с помощью него можно использовать только системы для которых возможна установка через serial-консоль. Однако, после установки возможно использование виртуальной системы другими средствами (например vnc или ssh). Также для установки из пакетов доступен эмулятор qemu. Популярной программы VirtualBox в пакетах нет, и поставить его иными способами не получится.
Здорово, а если я хочу контейнеры/докер/куберенетс? Docker и Kubernetes это Linux-технологии, доступные только при использовании специфических подсистем ядра Linux. Соотвественно - для их работы необходимо ядро Linux. Однако в пакетах OpenBSD имеются клиенты для docker и kubernetes - их использование возможно в связке с запущенным где-либо ядром Linux (например на удаленном сервере, или в виртуальной машине vmm, по аналогии с тем, как это реализовано в macOS при помощи гипервизора xhyve)
Я готов попробовать, но вот есть ли под OpenBSD нужная мне программа? Все программы для OpenBSD устанавливаются через систему пакетов, скомпилированных из открытых исходных текстов программ, доступных на зеркалах проекта. Для удобного поиска нужных программ можно использовать неофициальные сайты openbsd.app и openports.pl
Отлично, а еще у меня видеокарта от Nvidia/AMD/Intel - будет ли она работать? Все зависит от того насколько новая/старая модель вашей видеокарты и успели ли внести ее поддержку в ядро (и наоборот - не удалили ли поддержку за давностью лет). В общем случае можно полагать, что более менее новые карты AMD и Intel работают хорошо, а карты от Nvidia не работают совсем (исключение - старые карты которые поддерживаются драйвером nv)
Я хочу иметь на одном компьютере OpenBSD вместе с Windows/Linux/другой BSD, помогите с разметкой диска! Если у вас это первый опыт установки двух систем на один жесткий диск - мы крайне рекомендуем воздержаться от этого решения. Уничтожить таким образом рабочую систему не просто, а очень просто. Гораздо лучше рассмотреть вариант использования виртуальной машины (например VirtualBox), а впоследствии либо перейти на OpenBSD полностью либо установить систему на отдельный выделенный диск.
Как насчет игр? Как можно догадаться - Steam и GOG под OpenBSD нет. Но зато в пакетах доступно множество open-source движков и игр. Например - gzdoom, eduke32, ioquake3 и другие. Если совсем невмоготу - в базовой системе есть консольный tetris. Также информацию по запуску различных игр под OpenBSD можно найти на сайте https://playonbsd.com.
Мне нравится pfsense/opnsense, есть ли firewall с GUI под OpenBSD? Есть, проект называется UTMFW (ранее назывался ComixWall). Так же можно обратить внимание на проект того же автора - PFRE - редактор правил для pf.
А как насчет live-системы на базе OpenBSD? Есть, проект Fuguita.
В моем любимом дистрибутиве Linux есть программа sudo, почему ее нет в базовой поставке OpenBSD? Программа sudo была частью базовой системы OpenBSD до версии 5.9, после чего была заменена собственной аналогичной утилитой - doas(1). Если нужна именно sudo, её можно установить из портов.

Настройки

Хочу кириллицу в чистой консоли без X-сервера! А кстати, как примонтировать флешку на fat32 с русской кодировкой? Увы, на текущий момент полноценная работа с наборами символов отличными от ASCII возможна только в среде X-Window.

В консоли банально отсутствуют шрифты с нужными символами.

Тоже самое касается флеш накопителей с файловой системой fat32 - никакие опции монтирования не помогут увидеть русские имена файлов, это ограничение на уровне ядра. В качестве альтернативы можно рассмотреть перевод флеш-накопителя на файловую систему exfat и монтировать её при помощи утилиты mount.exfat0 из пакета exfat-fuse. Кстати, exfat является более современной файловой системой, которая поддерживает unicode, размер файла более 4 ГБ и поддерживается большинством современных ОС.

Спасибо, я понял. А поможете в таком случае настроить кириллицу для X11? В общем случае должно быть достаточно добавить в пользовательский .xsession (или .xinitrc, в зависимости от способа настройки запуска X11) следующее:
export LC_CTYPE="en_US.UTF-8"
setxkbmap -layout "us,ru"
setxkbmap -option "grp:ctrl_shift_toggle"
А как настроить bluetooth? Поддержка bluetooth была удалена ввиду отсутствия ресурсов для поддержания кодовой базы в приемлемом состоянии. Для аудиоустройств возможна ограниченная поддержка с помощью специального usb-трансивера Creative BT-W2.
Почему так медленно работают файловые системы? Можно ли что-то с этим сделать? Увы, но нет - для стандартной файловой системы OpenBSD (ffs2) можно разве что включить soft updates (см. официальный faq). Для файловых систем работающих через fuse сделать ничего нельзя - текущая реализация fuse имеет ограничения в плане возможностей и производительности. В случае необходимости использовать ntfs в режиме "только чтение" встроенная реализация ntfs (mount_ntfs) в некоторых случаях возможно будет работать быстрее.
Можно что-то сделать со скоростью работы linux в vmm? Одна из основных проблем производительности linux в vmm (помимо ограничений самого vmm) - отсутствие реализации vmm clocksource в ядре linux. Поддержку clocksource можно добавить собрав и загрузив модуль ядра linux vmm_clock, что резко понизит утилизацию процессора в виртуальной системе.

Как можно помочь проекту OpenBSD?

Многие новички после установки OpenBSD сразу же хотят внести свои изменения в код системы. Увы, это создает лишь головную боль разработчикам. Практически со 100% гарантией можно сказать, что если вы плохо знакомы с системой, ваш патч будет отклонен. Проект имеет очень жесткие требования для внесения изменений, и даже опытные программисты часто испытывают трудности при его оформлении, а его необходимость становится предметом долгих дискуссий.

С другой стороны, это совсем не значит, что новичок не может помочь проекту, но каждый раз стоит помнить о следующих простых вещах:

  • Не стоит помогать проекту просто из-за того, что вы хоть как-то, но хотите помогать. Каждое из описанных ниже пунктов требует опыта и знания системы. Все отправленное разработчикам будет проверено. Плохо сделанная работа никак не поможет, но лишь отнимет их время.
  • Разработчики ничего никому не должны. Если вам покажется, что у вас родилась гениальная идея, и её реализация, написанная вами, в обязательном порядке должна быть добавлена в систему, приготовтесь к тому, что её, скорее всего, отклонят. Не потому, что кто-то плохой или не понимает её гениальности, а потому, что система с самого момента создания следует правилу «лучше меньше, но лучше». Патч примут только если в этом действительно будет смысл.
  • Цели проекта OpenBSD могут быть не такими, как у системы, которой вы пользовались до этого. Я часто видел новичков в OpenBSD, которые были уверены, что одна из целей проекта это, к примеру, популярность. Нет. Ознакомьтесь с ее целями.

    Итак, если прочитанное выше не отпугнуло, и у вас есть время и желание для работы над системой, вот несколько направлений, куда можно направить свою энергию и тем самым помочь проекту.

  • Тестирование портов.
  • Проверка web страниц проекта. Поверьте, и там бывают опечатки или просто неточности.
  • Написание статей/материалов, где вы можете поделиться опытом настройки того или иного компонента в OpenBSD. Материал можно разместить прям тут, или в своем блоге, если он у вас есть.
  • Создание новых портов. Если у вас есть опыт создания портов или бинарных пакетов в других системах, этот опыт может очень пригодиться и тут.
  • Портирование и поддержка компонентов OpenBSD в других системах. Например, вы можете собрать какой-то из стандартных демонов OpenBSD (например OpenBGPD) в той или иной UNIX/Linux системе. Там ее можно протестировать и, возможно, найти проблему или даже проблемы, которые не заметили другие. Это очень ценный опыт. Вы не только открываете возможность другим пользователям (тестировщикам) использовать программу, но и сами лучше начинаете понимать как она работает.
  • Перевод официальной документации на русский язык.
  • Если вы дизайнер и умеете «рисовать», вы можете предложить свою помощь проекту. Не стоит думать, что это никому не нужно. Проект OpenBSD очень серьезно относится к этой теме. Я не знаю другой системы, релизы которой сопровождались бы новыми art-мотивами, а так же песнями. Напишите Алексу, если вы хотели бы попробовать.
  • Помогать новичкам на телегам-канале openbsd_ru находить решения или просто обсуждать любимую систему :)

    Еще одним способом помочь проекту OpenBSD является финансовая помощь OpenBSD Foundation. Эта организация занимается в том числе и финансовыми вопросами проекта.

    [Наверх]