Весьма странно видеть в «Блоге начинающего линуксоида» статью об установке и настройке совершенно левой операционной системы 🙂 Однако по моим наблюдениям, всё больше и больше людей начинают интересоваться FreeBSD. Кто-то чисто ради интереса, ибо слышал о ней в новостях, или что на ней работает Playstation 4, а кто-то ради «свалить с Линукса, который всё время ломают всякие Поттеринги, со своими systemd».
Лично для меня это первый пункт. Мне нравится пользоваться самыми разнообразными операционными системами, даже теми, которые давно почили, или совершенно не привычны любому современному пользователю ПК. К сожалению, толковой и полной информации о том, как заюзать FreeBSD в качестве десктопа, в рунете я не нашёл. На зарубежных сайтах ситуация гораздо лучше, но всё равно не идеал. Потому собрав всё по частям, я решил написать этот гайд. Он будет актуален для FreeBSD 11, но скорее всего подойдёт и для FreeBSD 10 и для более свежих версий этой ОС. Прошу обратить внимание: предполагается что читатель уже имеет навыки работы с Unix-системами и уверенно себя чувствует в терминале.
Первым делом нужно скачать дистрибутив системы. В отличии от GNU/Linux, здесь нет тучи разнообразных дистрибутивов, FreeBSD — это одна, единая операционная система. Если вы будете ставить её с флешки (а скорее всего это так) — скачивайте образ с префиксом memstick. И записывайте на флешку любым способом. Я использовал утилиту Mintstick.
После того как вы загрузитесь с флешки, перед вами предстанет стартовый экран FreeBSD. Жмите Enter и ждите старта установщика. Установщик системы псевдографический, однако здесь работает мышь, так что освоиться будет проще. Нажимаем Intall. Система спросит о том, какую раскладку клавиатуры вы хотите установить. По умолчанию предлагается английская. Не заморачивайтесь и жмите Enter. Далее введите имя компьютера, на который ставите систему. Это будет необходимо, например, для сетевого доступа к ресурсам компьютера. Я в качестве имени написал freebsd-pc.
Далее система спросит об установке дополнительных архивов. По умолчанию выбраны 32-х битные библиотеки, необходимые для работы 32-х битных приложений, и коллекция портов (о них чуть позже). Рекомендую отметить пункт src, пригодится. Для этого выберите этот пункт и нажмите Пробел.
Теперь самый ответственный момент — разметка диска. Установщик поддерживает установку FreeBSD на файловые системы ZFS и UFS. Если ваш компьютер имеет 4 или менее гигабайта оперативной памяти, и у вас нет кучи дисков, которые вы хотели бы собрать в RAID-массив, а также если вам не нужен такой функционал, как создание снимков состояния файловой системы — в использовании ZFS смысла нет. На мой взгляд, в ней вообще нет смысла на десктопе, потому я выбираю классическую Unix File System (UFS).
Итак, допустим у вас на диске есть неразмеченное пространство и диск имеет таблицу разделов GPT. Выбираем тот диск, на котором это неразмеченное пространство, и внизу стрелками выбираем пункт Create. Указываем размер раздела и точку монтирования — / . Таким же способом создаём другие разделы (/home, swap и т.д.). Если же диск у вас имеет таблицу разделов MBR — то сперва потребуется создать раздел с метками BSD, и уже в нём создавать остальные разделы. Что-то вроде расширенного раздела. Внимательно всё перепроверьте, чтобы случайно не затереть рабочие разделы! Если же вы ставите FreeBSD на отдельный пустой диск — то задача будет проще.
После окончания разметки выбираем Finish и Commit. Начнётся установка.
После распаковки архивов система попросит указать пароль root. Далее будет настройка сетевых интерфейсов, временной зоны и выбор служб при запуске системы. Я отметил эти
Пропускаем раздел System Hardenng и соглашаемся на добавление пользователя в систему. Имя пользователя вводится с маленькой буквы, полное имя уже можно писать с большой. По сути на все вопросы можно отвечать клавишей Enter. Здесь важно лишь указать пароль для своего пользователя, в конце подтвердить введённые данные, набрав yes и нажав Enter, и отказаться от добавления других пользователей (набрав no и нажав Enter). Далее нажимаем Exit и перезагружаемся. Установка системы на этом окончена.
Добавление FreeBSD в меню GRUB 2.
Если вы установили FreeBSD рядом с Linux, но при простом обновлении загрузчика GRUB пункт с FreeBSD не появится в меню выбора OS. Потому откройте файл /etc/grub.d/40_custom и добавьте туда:
menuentry «FreeBSD 11.1» —class freebsd —class bsd —class os {
insmod ufs2
insmod bsd
insmod part_gpt
set root='(hd2,5)’
search —no-floppy —fs-uuid —set 4b22f9090565ab77
kfreebsd /boot/loader
}
Важно указать верный раздел. hd2==/dev/sdb, 5 — /dev/sdb5. Таким образом если у вас FreeBSD стоит на разделе /dev/sda3, например — то это будет hd1,3. Выяснить на каком разделе у вас стоит FreeBSD можно командой sudo blkid. Этой же командой узнайте идентификатор нужного раздела (UUID) и впишите его в конфиг (без кавычек).
Настройка после установки.
Для удобства рекомендую сразу перейти к главе об установке графического окружения. Будет проще настраивать 🙂
Самая вкуснятина 🙂 Теперь предстоит слепить из серверной и по большей части не заточенной строго под что-то конкретное ОС — десктоп.
Важное примечание: во FreeBSD существует два способа установки программ — с помощью системы портов и установка бинарных пакетов. Порты — это сценарии командной оболочки, скачивающие исходный код программы и компилирующие из него бинарный файл. Установка из портов занимает весьма продолжительное время (зависит от скорости сети и мощности процессора вашего компьютера), но позволяет гибко настраивать и оптимизировать любое ПО. Второй же способ ничем не отличается от установки программ в какой-нибудь Ubuntu. Я предпочитаю им
енно его. И время экономлю, да и настраивать и оптимизировать что-то я не хочу. Помните как мы отметили на этапе установки пункт src — исходный код базовой системы? Так вот: он понадобится если вы, например, будете устанавливать драйвер Nvidia из портов. Или же пересобирать ядро. Я его поставил для первого случая, ибо в бинарном виде драйвер обновляется не сразу. Можно устанавливать софт и из портов и из бинарных пакетов, они никак не будут конфликтовать.
Первым делом я устанавливаю sudo, добавляю в него своего пользователя, устанавливаю текстовый редактор nano (так и не смог приучить себя к Vim), а также заменяю командную оболочку csh на Bash:
pkg install sudo bash nano
Открываем файл /usr/local/etc/sudoers, ищем строку:
root ALL=(ALL:ALL) ALL
и под ней пишем то же самое, но вместо root указываем имя вашего пользователя (в моём случае это sunderland93). Теперь установим для него оболочку Bash по умолчанию:
chsh -s /usr/local/bin/bash sunderland93
Теперь наберите exit и залогиньтесь под своим пользователем.
Теперь приступим к настройке локалей (мы же хотим иметь русский язык в системе и в приложениях?):
sudo pw user mod user_name -L russian
Далее в /boot/loader.conf добавьте строки:
kern.vty=vt
hw.vga.textmode=0
и перезагрузитесь. Это необходимо для того, чтобы в консоли у вас был русский шрифт, а не крякозябры и вопросительные знаки.
Отлично. Теперь самое время заняться оптимизацией FreeBSD под десктоп. Открываем файл /etc/sysctl.conf и кидаем туда всё это:
# Расширение разделяемой памяти для X11
kern.ipc.shmmax=67108864
kern.ipc.shmall=32768
# Увеличение отзывчивости системы при высокой нагрузке на CPU (200/224)
kern.sched.preempt_thresh=224
# Разделяемая память для Chromium
kern.ipc.shm_allow_removed=1
Сохраняем. Теперь добавляем некоторые параметры в загрузчик. Открываем /boot/loader.conf и добавляем следующее:
# Стильный логотип при загрузке
loader_logo=»beastie»
# Тюнинг ядра при загрузке
kern.ipc.shmseg=1024
kern.ipc.shmmni=1024
kern.maxproc=100000
# Поддержка картридеров MMC/SD
mmc_load=»YES»
mmcsd_load=»YES»
sdhci_load=»YES»
# Файловая система в пространстве пользователя
fuse_load=»YES»
# Температурные датчики Intel
coretemp_load=»YES»
# Температурные датчики AMD
amdtemp_load=»YES»
# TMPFS
tmpfs_load=»YES»
# Поддержка асинхронного ввода-вывода
aio_load=»YES»
# Поддержка юникода для переносных устройств
libiconv_load=»YES»
libmchain_load=»YES»
cd9660_iconv_load=»YES»
msdosfs_iconv_load=»YES»
Последние штрихи. Открываем /etc/rc.conf и вписываем:
# Управление питанием и энергосбережение
powerd_enable=»YES»
powerd_flags=»-a hiadaptive -b adaptive»
# Включение BlueTooth
hcsecd_enable=»YES»
sdpd_enable=»YES»
# Синхронизация даты и времени
ntpd_enable=»YES»
ntpd_flags=»-g»
Сохраняем. На очереди настройка монтирования дисков (да да, это вам не Linux, здесь и это нужно настроить вручную).
Подключим виртуальную файловую систему /proc. Она будет очень нужна для кучи софта, а также некоторых графических окружений:
sudo nano /etc/fstab
proc/proc >procfsrw00
Монтирование дисков.
Разрешим пользователю монтирование дисков:
sudo nano /etc/sysctl.conf
vfs.usermount=1
Добавляем своего пользователя в группы wheel и operator:
sudo pw usermod sunderland93 -G wheel
sudo pw usermod sunderland93 -G operator
Смягчаем права на доступ к блочным устройствам. Открываем /etc/devfs.conf и в конец дописываем:
# Разрешить доступ к оптическим устройствам
perm /dev/acd0 0666
perm /dev/acd1 0666
perm /dev/cd0 0666
perm /dev/cd1 0666
# Разрешить монтирование всех USB устройств
perm /dev/da0 0666
perm /dev/da1 0666
perm /dev/da2 0666
perm /dev/da3 0666
perm /dev/da4 0666
perm /dev/da5 0666
# Прочие устройства
perm /dev/pass0 0666
perm /dev/xpt0 0666
perm /dev/uscanner0 0666
perm /dev/video0 0666
perm /dev/tuner0 0666
perm /dev/dvb/adapter0/demux0 0666
perm /dev/dvb/adapter0/dvr 0666
perm /dev/dvb/adapter0/frontend0 0666
Этот список можете дополнить своими устройствами, если что-то у вас откажется работать. Теперь добавляем правила для устройств, которые монтируются после загрузки системы. В /etc/devfs.rules
[devfsrules_common=7]
add path ‘ad[0-9]*’ mode 666
add path ‘ada[0-9]*’ mode 666
add path ‘da[0-9]*’ mode 666
add path ‘acd[0-9]*’ mode 666
add path ‘cd[0-9]*’ mode 666
add path ‘mmcsd[0-9]*’ mode 666
add path ‘pass[0-9]*’ mode 666
add path ‘xpt[0-9]*’ mode 666
add path ‘ugen[0-9]*’ mode 666
add path ‘usbctl’ mode 666
add path ‘usb/*’ mode 666
add path ‘lpt[0-9]*’ mode 666
add path ‘ulpt[0-9]*’ mode 666
add path ‘unlpt[0-9]*’ mode 666
add path ‘fd[0-9]*’ mode 666
add path ‘uscan[0-9]*’ mode 666
add path ‘video[0-9]*’ mode 666
add path ‘tuner[0-9]*’ mode 666
add path ‘dvb/*’ mode 666
add path ‘cx88*’ mode 0660
add path ‘cx23885*’ mode 0660
add path ‘iicdev*’ mode 0660
add path ‘uvisor[0-9]*’ mode 066
add path ‘dri/*’ mode 0666 group wheel
В /etc/rc.conf добавьте строки:
devfs_system_ruleset=»devfsrules_common»
polkit_enable=»YES»
kld_list=»fuse ext2fs cuse»
Монтирование разделов с файловой системой Ext4:
sudo pkg install fusefs-ext4fuse
разделов с файловой системой NTFS:
sudo pkg install fusefs-ntfs
Некоторым графическим окружениям (например KDE 4), необходим работающий демон hald (HAL, слой абстракции от оборудования, отвечающий за монтирование устройств). HAL в Linux был объявлен неподдерживаемым ещё в 2008 году, но во FreeBSD всё ещё используется. Я не уверен насколько он нужен в современных графических окружениях, но пусть лучше работает. Важное примечание: HAL функционально необходим для KDE 4 и GNOME 3. В KDE 4 без него не работают фичи энергосбережения, а также не отображаются значки подключённых устройств в файловом менеджере (впрочем это касается всех графических окружений). Однако через HAL мне так и не удалось (пока) настроить монтирование накопителей по клику в Dolphin (баг известен https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=204464), да и другие способы пока что не помогли. В окружениях MATE и Xfce лучше использовать Automount, который работает напрямую с родным менеджером devd и автоматически монтирует носители при подключении. Устанавливаем:
sudo pkg install automount
Пример конфига для MATE:
/usr/local/etc/automount.conf
USERUMOUNT=YES
ATIME=NO
REMOVEDIRS=YES
FM=»caja —browser —no-desktop»
USER=sunderland93
ENCODING=ru_RU.UTF-8
CODEPAGE=cp866
Помните, что без HAL у вас не будут отображаться значки дисков в файловом менеджере, поэтому вам придётся монтировать нужные разделы вручную, либо добавлять записи в /etc/fstab. Флешки и внешние жёсткие диски будут монтироваться сразу при подключении. Если вы знаете как настроить HAL на свежих FreeBSD, чтобы он работал как положено, и позволял монтировать любые носители по клику на значке в файловом менеджере — напишите в комментариях. Буду благодарен 🙂
Звук.
Теперь врубаем звук. ДА ПОГРОМЧЕЕЕЕЕ 🙂 А именно — подгружаем нужный драйвер и указываем устройство вывода звука по умолчанию. FreeBSD использует звуковую подсистему OSS — Open Sound System, которая в бородатые времена применялась и в Linux, пока не была заменена на ALSA. Однако OSS во FreeBSD несколько отличается от того, что был в Linux. Особенностью OSS является то, что она наиболее, так скажем, напрямую работает со звуковым оборудованием (устройствами /dev/dsp, /dev/audio и так далее), и потому естественно имеет к ним монопольный доступ. Тут хочу сделать одно замечание: очень вероятно, что вы столкнётесь с той же проблемой, что и я. Если у вас подключены колонки, к заднему входу, и в передний вы подключите наушники — звук продолжит идти через колонки. И нужно будет снова менять устройство вывода звука по умолчанию. Возможно решением проблемы является PulseAudio. Я пока не разобрался с этой проблемой, но как только разберусь — добавлю решение в эту статью. А пока просто включаем:
Добавляем в /boot/loader.conf строку:
snd_driver_load=»YES»
Теперь смотрим список своих звуковых устройств:
cat /dev/sndstat
Installed devices:
pcm0: (play)
pcm1: (play)
pcm2: (play)
pcm3: (play)
pcm4: (play/rec) default
pcm5: (play/rec)
pcm6: (play)
No devices installed from userspace.
Звуковой вход на задней стороне системного блока здесь «pcm4». Открываем /etc/sysctl.conf и добавляем:
hw.snd.default_unit=4
# Не включать автоматически новые звуковые устройства
hw.snd.default_auto=0
Если вам необходим PulseAudio — его также легко можно установить:
sudo pkg install pulseaudio
Многие пользователи BSD уверяют, что OSS обладает наивысшим качеством звучания, что при наличии хорошей звуковой карты позволяет получить «тёплый ламповый звук». Однако я не склонен в это верить.
Фаерволл.
По умолчанию во FreeBSD отключен фаерволл (брандмауэр), и крайне рекомендуется его включить. В составе FreeBSD имеется один из самых лучших в мире фаерволлов — PF, от проекта OpenBSD. Открываем файл /etc/pf.conf и добавляем туда этот конфиг:
# The name of our network interface as seen in `ifconfig`
ext_if=»re0″
# Macros to define the set of TCP and UDP ports to open.
# Add additional ports or ranges separated by commas.
# UDP 60000-60010 is mosh control http://mosh.mit.edu/
tcp_services = «{ssh, https}»
udp_services = «{60000:60010}»
# If you block all ICMP requests you will break things like path MTU
# discovery. These macros define allowed ICMP types. The additional
# ICMPv6 types are for neighbor discovery (RFC 4861)
icmp_types = «{echoreq, unreach}»
icmp6_types=»{echoreq, unreach, 133, 134, 135, 136, 137}»
# Modulate the initial sequence number of TCP packets.
# Broken operating systems sometimes don’t randomize this number,
# making it guessable.
tcp_state=»flags S/SA keep state»
udp_state=»keep state»
# Don’t send rejections. Just drop.
set block-policy drop
# Exempt the loopback interface to prevent services utilizing the
# local loop from being blocked accidentally.
set skip on lo0
# all incoming traffic on external interface is normalized and fragmented
# packets are reassembled.
scrub in on $ext_if all fragment reassemble
# set a default deny policy.
block in log all
# This is a desktop so be permissive in allowing outgoing connections.
pass out quick modulate state
# Enable antispoofing on the external interface
antispoof for $ext_if inet
antispoof for $ext_if inet6
# block packets that fail a reverse path check. we look up the routing
# table, check to make sure that the outbound is the same as the source
# it came in on. if not, it is probably source address spoofed.
block in from urpf-failed to any
# drop broadcast requests quietly.
block in quick on $ext_if from any to 255.255.255.255
# Allow the services defined in the macros at the top of the file
pass in on $ext_if inet proto tcp from any to any port $tcp_services $tcp_state
pass in on $ext_if inet6 proto tcp from any to any port $tcp_services $tcp_state
pass in on $ext_if inet proto udp from any to any port $udp_services $udp_state
pass in on $ext_if inet6 proto udp from any to any port $udp_services $udp_state
# Allow ICMP
pass inet proto icmp all icmp-type $icmp_types keep state
pass inet6 proto icmp6 all icmp6-type $icmp6_types keep state
Осталось только его включить:
sudo echo ‘pf_enable=»YES»‘ >> /etc/rc.conf
sudo service pf start
Графическое окружение.
Ну и наконец главная часть для десктопа — графическое окружение. Тут выбор почти аналогичен Линуксу. Разве что KDE Plasma 5 всё ещё в экспериментальной поддержке и отсутствует в дереве портов. Сперва установим иксы и хорошие шрифты:
sudo pkg install xorg noto
Хочу сразу предупредить: большинство графических окружений разрабатываются с прицелом на Linux, отодвигая поддержку BSD на второй план (а то и дальше). Поэтому не удивляйстесь, если что-то, что у вас идеально работало в Линуксе — здесь будет работать через очко, либо вообще не будет работать.
Для работы графических окружений требуется включить демон dbus (шина передачи сообщений между программами) В /etc/rc.conf добавляем:
dbus_enable=»YES»
Ставим графические окружения:
KDE 4:
sudo pkg install x11/kde4
В /etc/rc.conf добавляем:
kdm4_enable=»YES»
dbus_enable=»YES»
hald_enable=»YES»
sudo service kdm4 start
MATE:
sudo pkg install x11/mate
Для возможности выключения, перезагрузки и прочего от имени вашего пользователя, необходимо настроить ConsoleKit. В /usr/local/etc/polkit-1/rules.d создаём правило 60-shutdown.rules со следующим содержимым:
polkit.addRule(function (action, subject) {
if ((action.id == «org.freedesktop.consolekit.system.restart» ||
action.id == «org.freedesktop.consolekit.system.stop» ||
action.id == «org.freedesktop.consolekit.system.suspend»)
&& subject.isInGroup(«wheel»)) {
return polkit.Result.YES;
}
});
В /usr/local/etc/polkit-1/localauthority/50-local.d/ создайте файл org.freedesktop.consolekit.pkla с содержимым:
[Restart]
Identity=unix-group:wheel
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Shutdown]
Identity=unix-group:wheel
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Suspend]
Identity=unix-group:wheel
A
ction=org.freedesktop.consolekit.system.suspend
ResultAny=yes
ResultInactive=yes
ResultActive=yes
MATE не имеет своего дисплейного менеджера, потому запускать его можно либо через команду startx, предварительно прописав команду запуска, либо через любой другой дисплейный менеджер, например Slim. Первый способ:
Создайте в домашнем каталоге файл .xinitrc и пропишите туда
exec ck-launch-session dbus-launch —exit-with-session mate-session
Запускать командой startx
Второй способ:
pkg install slim
В /usr/local/etc/slim.conf добавьте строку:
sessiondir /usr/local/share/xsessions/
В .xinitrc пропишите:
exec ck-launch-session dbus-launch —exit-with-session $1
Включите Slim:
echo ‘slim_enable=»YES»‘ >> /etc/rc.conf
service slim start
Если вы хотите установить Compiz:
sudo pkg install x11-wm/compiz-fusion
Xfce:
pkg install x11/xfce
Для запуска добавьте в .xinitrc строки:
LANG=ru.RU-UTF-8
exec startxfce4 —with-ck-launch
либо используйте Slim. Указание локали в этом файле необходимо только если у вас выбран русский, в противном случае диспетчер задач Xfce падает при запуске (ошибка известная).
Cinnamon:
pkg install x11/cinnamon
Для запуска добавьте в .xinitrc строку:
exec cinnamon-session
либо используйте Slim.
GNOME 3:
pkg install x11/gnome3
В /etc/rc.conf добавьте»
hald_enable=»YES»
dbus_enable=»YES»
gnome_enable=»YES»
gdm_enable=»YES»
Настройка видеодрайвера.
Для карт Nvidia:
sudo kldload linux64
sudo pkg install x11/nvidia-driver x11/nvidia-settings x11/nvidia-xconfig
Загрузка модуля Nvidia при запуске системы:
sudo echo ‘nvidia-modeset_load=»YES»‘ >> /boot/loader.conf
Запустите nvidia-xconfig и откройте созданный ею файл /etc/X11/xorg.conf. Добавьте туда следующую секцию для активации поддержки freetype2, glx и type1:
Section «Module»
Load «freetype»
Load «bitmap»
Load «type1»
Load «glx»
EndSection
Перезагрузитесь.
Для видеочипов Intel и Radeon:
От рута:
X -configure
cp /root/xorg.conf.new /etc/X11/xorg.conf
Откройте получившийся конфиг и добавьте туда следующие строки, для активации композита, DRI2, GLX и прочего:
В секцию Extensions:
Option»Composite» «Enable»
В секцию ServerLayout:
Option «AIGLX» «true»
В секцию Device:
Option «AccelMethod» «EXA»
Option «DRI» «true»
В секцию Modules:
Load «dbe»
Load «dri»
Load «dri2»
Load «extmod»
Load «record»
Load «freetype»
Load «bitmap»
Load «type1»
Load «glx»
Linuxulator.
FreeBSD имеет слой совместимости с Linux под названием Linuxulator. Он основан на CentOS 7, и позволяет запускать многочисленные Linux-приложения. Например Adobe Flash или Steam. Это типа Wine, но для Линуксового софта. Включается просто:
echo ‘linux_enable=»YES»‘ >> /etc/rc.conf
kldload linux
Поддержка принтеров:
pkg install print/cups
В /etc/rc.conf добавьте:
# Отключить демон line print, так как у нас есть CUPS
lpd_enable=»NO»
# Включить
cupsd_enable=»YES»
Итог.
Ну, вот, собственно, и всё. Как видите телодвижений предстоит выполнить очень много, чтобы превратить эту ОС в десктоп. При этом вы вполне можете наткнуться на некоторые ограничения или косяки. Не стоит забывать, что для FreeBSD ощутимо меньше драйверов, чем для Linux, плюс ко всему большинство популярных графических окружений пишутся с оглядкой именно на Linux, и работа на BSD-системах там на втором плане. Я же пока не могу что-то конкретное сказать по поводу использования FreeBSD на десктопе. Я поставил её совсем недавно. Но через несколько месяцев я выложу мнение о ней на своём канале. Так что до скорых встреч!
Использованы материалы:
https://cooltrainer.org/a-freebsd-desktop-howto/
https://www.freebsd.org/doc/handbook/
Автор: Aleksey Samoilov