Главная
Главная Руководства FreeBSD › Установка FreeBSD 10.1



Автор:

Статья опубликована: 2015-05-04 12:35:34
Последние правки: 2018-05-05 23:19:46

Делаем домашний сервер. Загружаемся с флешки и устанавливаем FreeBSD 10.1 из интернета. Делаем UTF-8 основной кодировкой. Обновляем систему и порты до текущего состояния.

Стыдно сказать, но до этого момента мой домашний сервер работал на FreeBSD 8.2 и руки не доходили обновиться. Но вот время пришло и на смену восьмерке идет FreeBSD 10.1. Решил попробовать сетевую установку с загрузкой с флешки, благо толщина канала позволяет.
  • Готовим флешку

    Качаем нужный образ с сайта FreeBSD. Я выбрал архитектуру amd64, образы лежат тут. Образ для флешки: FreeBSD-10.1-RELEASE-amd64-memstick.img

    Запиливаем флешку. Под FreeBSD это можно сделать программой dd. У меня флешка определилась как da0. Не забываем, что флешку предварительно монтировать не надо.
    # dd bs=64k if=FreeBSD-10.1-RELEASE-amd64-memstick.img of=/dev/da0
    11175+0 records in
    11175+0 records out
    732364800 bytes transferred in 203.900636 secs (3591773 bytes/sec)
    
    Про запиливание инсталлянта более подробно можно прочитать в официальном руководстве.


  • Установка

    Загружаемся с флешки и устанавливаем. Замечания по установке:
    • Keymap Selection - оставляем default. Из русских в списке есть только CP866, ISO-8859-5, koi8-r, но это прошлый век, после установки руками настроим UTF.
    • Distribution Select - я выбрал lib32 (32-х разрядные библиотеки), ports (порты, обязательно) и src (исходники ОС, не обязательно, но они все равно потом понадобятся)
    • Partitioning - тут решать вам. Есть древний гид по разбивке, где советуют разбивать отдельно на /usr /usr/local /var /home и приводятся рекомендуемые размеры, в качестве основного аргумента говорится, что если вдруг будет полностью забит один из разделов, то это никоим образом не повлияет на остальные и система не повиснет. Также, последний писк файловых систем - это zfs, но прирост по скорости присутствует только если у вас два диска в райде. У меня есть два диска, но делать из них райд нет смысла (все таки домашний сервер), поэтому я выбрал Auto (UFS), на загрузочном (300GB) автоматически был сделал swap-раздел (по размеру ОЗУ), загрузочный раздел и корневой раздел где будет жить операционка. Второй диск (1TB) не трогал, на нем все осталось от старого сервера, примонтирую его позже в качестве /home. На нем будут жить все сервисы (домики пользователей, файлопомойка и т.д.). При таком варианте приходящие файлы не смогут положить систему, если они и забьют диск, то только второй.
    • Select local or UTC ... clock - я выбрал [No], потому что мой сервер использует локальное время. После этого появятся окна для выбора часового пояса, выбирайте какой вам нужно.
    • System Configuration - оставил только sshd
    • Add User Accounts - пользовательские аккаунты добавлять не стал, так как ещё не примонтирован второй диск. Добавлю позже.
    Reboot


  • Обновление
    Обновляем коллекцию портов
    Обновляем исходный код


  • Компилируем своё ядро, устанавливаем ядро и мир

    Для чего нужно компилировать своё ядро? Во-первых, ядро по умолчанию содержит кучу ненужных драйверов для устройств. Мы их выкинем, что уменьшит размер файла ядра и сэкономит память. Во-вторых, в ядре по умолчанию нет нужных нам опций для брандмауера, nat-а, UTF и прочих радостей как, например, возможности получать температуру процессора. Ядро будем писать не с нуля, а изменим GENERIC.

    Всё делаем по проверенной несколькими поколениями FreeBSD схеме. Чтобы случайно не прибить свой конфиг (поверьте, у меня такое было), копируем GENERIC в директорую root-а, переименовываем файл (например, в SERVER) и делаем на него ссылку в директорию с конфигурациями ядра.
    # cp /usr/src/sys/amd64/conf/GENERIC /root/kernel/SERVER
    # ln -s /root/kernel/SERVER /usr/src/sys/amd64/conf/SERVER
    
    Редактируем /root/kernel/SERVER
    Ищем строчку
    ident GENERIC
    
    и меняем её на
    ident SERVER
    
    Закомментируйте все устройства (строка device), которых нет на вашем сервере, например, всяческие контроллеры SCSI, RAID-контроллеры, PCMCIA, ISA, беспроводные карты, флоппи. Только не отключите сетевые карты, которые установлены в сервере, список можно посмотреть командой:
    # ifconfig
    ale0: flags=8843 metric 0 mtu 1500
            options=c319a
            ether XX:XX:XX:XX:XX:XX
            inet XXX.XXX.XXX.XXX netmask 0xffffff00 broadcast XXX.XXX.XXX.XXX
            media: Ethernet autoselect (100baseTX )
            status: active
    rl0: flags=8802 metric 0 mtu 1500
            options=3808
            ether XX:XX:XX:XX:XX:XX
            media: Ethernet autoselect
            status: no carrier
    ipfw0: flags=8801 metric 0 mtu 65536
    lo0: flags=8049 metric 0 mtu 16384
            options=3
            inet 127.0.0.1 netmask 0xff000000
    tun0: flags=8051 metric 0 mtu 1500
            options=80000
            inet XXX.XXX.XXX.XXX --> 10.0.0.2 netmask 0xffffff00
            Opened by PID XXXX
    
    В этом примере на сервере установлены две карты ale0 и rl0, следовательно в файле конфигурации ядра не стоит трогать строчки
    device ale
    device rl
    
    Список поддерживаемого оборудования можно посмотреть в Hardware Notes на страничке релизов.

    После строки
    options SMP
    
    добавляем нужное нам:
    ##UTF8
    options TEKEN_UTF8
    ##FIREWALL
    options IPFIREWALL
    options IPFIREWALL_VERBOSE # разрешает запись информации о пакетах в syslog
    options IPFIREWALL_VERBOSE_LIMIT=50
    options IPFIREWALL_DEFAULT_TO_ACCEPT # задает последней строкой правил "разрешить всё", иначе после перезагрузки брандмауер заблокирует сеть
    options DUMMYNET # для регулирования полосы пропускания в ipfw
    ##NAT
    options IPDIVERT # для использования nat на уровне ядра
    options IPFIREWALL_NAT # используем NAT встроенный в ядро
    options LIBALIAS # обязательная опция для "ядерного" NAT
    options HZ="1000"
    ##VPN
    options NETGRAPH
    options NETGRAPH_PPP # поддержка ppp
    options NETGRAPH_PPTPGRE # поддержка gre-туннелирования
    ##ACCEPT_FILTER FOR NGINX
    ##можно почитать в статье про установку nginx
    options ACCEPT_FILTER_HTTP
    options ACCEPT_FILTER_DATA
    ##CPU TEMPERATURE
    device coretemp # устройство для получения температуры процессора
    
    Редактируем /etc/make.conf (если его нет, то создаем). Образец файла можно посмотреть тут: /usr/share/examples/etc/make.conf
    Добавляем свой процессор
    CPUTYPE?=pentium3
    
    Узнать тип своего процессора можно командой
    # cat /var/log/messages | grep CPU:
    
    или командой
    # sysctl -a | grep hw.model
    
    Теперь приступаем к компиляции и установке

    Чистим директории
    # cd /usr/obj && chflags -R noschg *
    # cd /usr/obj && rm -rf *
    # cd /usr/src && make cleandir && make cleandir && make cleandir
    
    Компилируем мир
    # cd /usr/src && make -j2 buildworld
    
    -j2 указывает компилировать в два потока, если процессор многоядерный, то можно вместо -j2 задать -j6

    Компилируем ядро
    # cd /usr/src && make buildkernel KERNCONF=SERVER
    
    Устанавливаем ядро
    # cd /usr/src && make installkernel KERNCONF=SERVER
    
    После того, как ядро скомпилировалось и установилось, перезагружаемся в однопользовательский режим на новом ядре.
    # reboot
    
    После загрузки выполняем проверку файловой системы
    # fsck -p
    
    Затем монтируем разделы и своп
    # mount /
    # mount -a
    # swapon -a
    
    Устанавливаем мир
    # cd /usr/src && make installworld
    
    Перезагружаемся в обычном режиме
    # reboot
    
    Готово, система установлена и обновлена.


  • Настройка
    • Добавляем обычного пользователя для того, чтобы заходить по ssh. Делается это командой
      # adduser
      
      Во время добавления не забудьте добавить этого пользователя в группу wheel.

    • Делаем UTF8 основной кодировкой ОС.
      Редактируем /etc/login.conf
      # ee /etc/login.conf
      
      russian|Russian Users Accounts:\
             :charset=UTF-8:\
             :lang=ru_RU.UTF-8:\
             :tc=default:
      
      Затем:
      # cap_mkdb /etc/login.conf
      
      И выполняем для каждого пользователя кроме root:
      # pw usermod -n $username -L russian
      
      Редактируем /etc/csh.cshrc
      setenv LANG ru_RU.UTF-8
      setenv LC_CTYPE ru_RU.UTF-8
      setenv LC_COLLATE POSIX
      setenv LC_ALL ru_RU.UTF-8
      
      Редактируем /root/.cshrc
      setenv LANG C
      setenv LC_CTYPE C
      setenv LC_COLLATE POSIX
      setenv LC_ALL C
      
    • Задаем нестандартный порт для sshd:
      # ee /etc/ssh/sshd_config
      
      Ищем в файле строку
      #Port 22
      
      раскомментируем её и зададим для подключения вместо стандартного 22-го порта свой, например, 1822
      Port 1822
      
      Перезагружаем sshd
      # /etc/rc.d/sshd restart
      
    • Включаем запись всех логов
      Редактируем файл /etc/syslog.conf. Ищем там строку
      #*.*                              /var/log/all.log
      
      и действуем согласно инструкции, которая записана в /etc/syslog.conf строчкой выше, после чего перезапускаем syslogd
      # /etc/rc.d/syslogd restart