воскресенье, 3 сентября 2017 г.

Гайд: Установка FreeBSD в качестве десктопной системы (Обновлено и дополнено)

Весьма странно видеть в "Блоге начинающего линуксоида" статью об установке и настройке совершенно левой операционной системы :) Однако по моим наблюдениям, всё больше и больше людей начинают интересоваться FreeBSD. Кто-то чисто ради интереса, ибо слышал о ней в новостях, или что на ней работает Playstation 4, а кто-то ради "свалить с Линукса, который всё время ломают всякие Поттеринги, со своими systemd". Лично для меня это первый пункт. Мне нравится пользоваться самыми разнообразными операционными системами, даже теми, которые давно почили, или совершенно не привычны любому современному пользователю ПК. К сожалению, толковой и полной информации о том, как заюзать FreeBSD в качестве десктопа, в рунете я не нашёл. На зарубежных сайтах ситуация гораздо лучше, но всё равно не идеал. Потому собрав всё по частям, я решил написать этот гайд. Он будет актуален для FreeBSD 12. Прошу обратить внимание: предполагается что читатель уже имеет навыки работы с 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 12.2" --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), а также заменяю командную оболочку sh на 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 добавьте строки:

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 procfs rw 0 0

Монтирование дисков.


Разрешим пользователю монтирование дисков:

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

Для простого и быстрого подключения накопителей с различными файловыми системами рекомендую использовать DSBMC. Это простой менеджер с графическим интерфейсом, работающий напрямую с системным демоном devd:
 
sudo pkg install dsbmc dsbmd
 
Запускаем демон и включаем его автозагрузку в /etc/rc.conf:
 
sudo kldload dsbmd

в /etc/rc.conf:

dsbmd_enable="YES"

Звук.


Теперь врубаем звук. ДА ПОГРОМЧЕЕЕЕЕ :) А именно - подгружаем нужный драйвер и указываем устройство вывода звука по умолчанию. FreeBSD использует звуковую подсистему OSS - Open Sound System, которая в бородатые времена применялась и в Linux, пока не была заменена на ALSA. Однако OSS во FreeBSD несколько отличается от того, что был в Linux. Особенностью OSS является то, что она наиболее, так скажем, напрямую работает со звуковым оборудованием (устройствами /dev/dsp, /dev/audio и так далее), и потому естественно имеет к ним монопольный доступ. Тут хочу сделать одно замечание: очень вероятно, что вы столкнётесь с той же проблемой, что и я. Если у вас подключены колонки, к заднему входу, и в передний вы подключите наушники - звук продолжит идти через колонки. И нужно будет снова менять устройство вывода звука по умолчанию. Возможно решением проблемы является PulseAudio. Я пока не разобрался с этой проблемой, но как только разберусь - добавлю решение в эту статью. А пока просто включаем:

Смотрим список своих звуковых устройств:

cat /dev/sndstat

Installed devices:
pcm0: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm2: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm3: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm4: <Realtek ALC888 (Rear Analog)> (play/rec) default
pcm5: <Realtek ALC888 (Front Analog)> (play/rec)
pcm6: <Realtek ALC888 (Rear Digital)> (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

 

Фаерволл.


По умолчанию во 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 5:






sudo pkg install sddm plasma5-plasma dolphin kate konsole
 
или всё одной кучей:

sudo pkg install kde5

В /etc/rc.conf добавляем:

sddm_enable="YES"
dbus_enable="YES"

sudo service kdm4 start

MATE:




sudo pkg install x11/mate

Для возможности выключения, перезагрузки и прочего от имени вашего пользователя, необходимо настроить ConsoleKit. В /usr/local/etc/polkit-1/rules.d создаём правило 05-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
Action=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 xfce xfce4-goodies

Для запуска добавьте в .xinitrc строки:

LANG=ru.RU-UTF-8
exec startxfce4 --with-ck-launch

либо используйте Slim. Указание локали в этом файле необходимо только если у вас выбран русский, в противном случае диспетчер задач Xfce падает при запуске (ошибка известная).

Cinnamon:




pkg install cinnamon

Для запуска добавьте в .xinitrc строку:

exec cinnamon-session

либо используйте Slim.

GNOME 3:




pkg install gnome3

В /etc/rc.conf добавьте"

dbus_enable="YES"
gnome_enable="YES"
gdm_enable="YES"

 

Настройка видеодрайвера.


Для карт Nvidia:

sudo pkg install nvidia-driver nvidia-settings 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

Перезагрузитесь.

Для видеочипов Radeon:

Radeon HD7000-R7 270X:
 
sudo pkg install drm-kmod
sudo pw useradd $USER -G video

В /etc/rc.conf:
 
kld_list="/boot/modules/radeonkms.ko"
 
Для Radeon серии RX и новее:

sudo pkg install drm-kmod
sudo pw useradd $USER -G video

В /etc/rc.conf"

kld_list="amdgpu"
 
Для видеочипов Intel:
 
Broadwell и новее:

sudo pkg install drm-kmod libva-instel-driver
sudo pw useradd $USER -G video

В /etc/rc.conf:

kld_list="/boot/modules/i915kms.ko"

Для Haswell и старше:

sudo pkg install drm-legacy-kmod libva-intel-driver
sudo pw useradd $USER -G video
 
В /etc/rc.conf:

kld_list="/boot/modules/i915drm.ko"
 

Linuxulator.


FreeBSD имеет слой совместимости с Linux под названием Linuxulator. Он основан на CentOS 7, и позволяет запускать многочисленные Linux-приложения. Например Adobe Flash или Steam. Это типа Wine, но для Линуксового софта. Включается просто:

echo 'linux_enable="YES"' >> /etc/rc.conf
kldload linux
kldload linux64
sudo pkg install linux_base-c7

Поддержка принтеров:


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/

8 комментариев:

  1. Добрый вечер, Алексей.
    Когда-то скачивал сайт www.bsdnotes.ru, есть локальная копия, правда тогда это было про FreeBSD v9.x. Если нужно, могу выложить архив на Яндекс-диск.

    ОтветитьУдалить
  2. Есть же десктоп-ориентированная фря: DragonFlyBSD.

    К сожалению, "пионеров", ломающих привычное поведение системы, хватает в любых opensource командах. На обычной FreeBSD я пару лет на десктопе просидел, после того, как каждое очередное обновление портов поломало половину иксов, плюнул и ушел на линукс.

    ОтветитьУдалить
  3. Здравствуйте!Есть же уже готовый продукт для десктопа на базе FreeBSD - TrueOS

    ОтветитьУдалить
  4. Добрый день. Предлагаю дополнить статью настройкой sendmail в качестве клиента для отправки сообщений через gmail.com (relay).

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. Здравствуйте, Алексей, спасибо большое за Вашу статью, всё по ней настроил и прекрасно работает! Единственное только - на версиях 12/12.1 почему-то не удалось запустить PF, добавил все правила как у вас, но сервис почему-то отказался стартовать, ругался на какие-то неправильные правила, что-то там типа "код 40...". Вы не могли бы актуализировать статью под новую версию?

    ОтветитьУдалить
  7. Спасибо автору, весьма полезная статья для тех, кому интересен процесс настройки, а за одно и для получения реального опыта в этом деле. Сам я пробовал большую часть ОС семейства BSD, но всегда возвращался к FreeBSD.

    ОтветитьУдалить