Linux Slackware Энциклопедия от А до Я
Сайт посвящен свободно распространяемому ПО и Linux Slackware в частности.
Разделы:
Раздел/Тема
Главная -> Оптимизация -> Компиляция ядра 2.6 для сервера.

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

Любой сервер это прежде всего ядро. Вот с него то мы и начнём. Настройка ядра не особо отличается от настройки ядра для домашнего компьютера. Тем более, компьютер иногда выполняет обе эти функции одновременно. Отличие первое, состоит в наборе поддерживаемых протоколов и оборудования. На сервере часто устанавливаю RAID массивы дисков, дополнительные устройства. Например в ядре могут присутствовать драйвера для дополнительных сетевых карт. Отличие второе, это различия в работе с сетью. Сервер может выполнять функции маршрутизатора или сетевого шлюза. Для этого потребуется поддержка маскарадинга и NAT. Также в зависимости от сети, в которой находится сервер, в ядро нужно включить соответствующие сетевые протоколы. В общем вариаций конфигураций куча и рассматривать их все будет неприлично долго. Я опишу средненький сервер, сделанный из домашнего компьютера. Т.к. те кто могут себе позволить специальный сервер со специальным железом, обычно в таких статьях не нуждаются.

Многие боятся переставлять свои сервера с 2.4 на 2.6. Считая, что эта ветка ещё сырая и т.д. и т.п. Хотя в связи с установкой нового ядра и появляется много мелких проблем, я все равно не считаю его таким уж сырым. Зато сколько появляется преимуществ! Взять хотя бы iptables. В ветке 2.6 включены возможности небезызвестного патча для этого файрвола - path-o-matic. А последние версии ядра работают вообще идеально.

Стоит отметить, что 2.6 ориентирован именно на высокопроизводительные серверы. Вот к примеру основные отличия ядра 2.6 от 2.4

Ядро kernel 2.4 kernel 2.6
Кол-во CPU 16 64
Объем ОЗУ 16 Gb 64 Gb на 32-хразрядных системах
Размер ФС 2 Tb 16 Tb
Типы ФС Ext2, Ext3, JFS, ReiserFS, XFS, FFS, HFS, HFS+, HPFS, FAT, VFAT, NTFSv4, MSDOS, ISO9660, NFSv3, SMB, Coda, NCP, InterMezzo Ext2, Ext3, JFS, ReiserFS, XFS, FFS, HFS, HFS+, HPFS, FAT, VFAT, NTFSv5, MSDOS, ISO9660, NFSv4, SMB, Coda, NCP, InterMezzo, NCP, AFS, CIFS
IPSec патч встроен
major устр-ва 255 4096

Хотел бы я иметь 64-х процессорный монстр с 64 Gb памяти и массивом VFS на 16 Tb. Даже представить трудно :) Новое ядро конечно же поддерживает большее количество устройств, различных мультимедийных девайсов. Количество поддерживаемых архитектур тоже заметно увеличилось - теперь без проблем можно поставить Linux например на PDA. Одним из самых заметных улучшений является новый планировщик процессов, отвечающий за псевдопараллельное выполнение задач для процессоров без технологии SMP и соответственно дающий еще больший выигрыш для процессоров c SMP. Заслуживает похвал и новый планировщик ввода/вывода в разы увеличивающий эффективность дисковой подсистемы. На самом деле планировщиков стало 2. Попробовать второй можно указав ядру elevator=deadline. Можно поискать в сети сравнительные тесты производительности ядер 2.4 и 2.6, но могу сразу подытожить - прирост производительности есть, причем он заметен даже на глаз - новое ядро грузится значительно шустрее. Хотите проверить? Тогда бегом на www.kernel.org

Качаем ядро и распаковываем его. В моем случае это было ядро версии 2.6.11.10. Распаковываем ядро в текущую директорию:

  # cd /usr/src/
  # tar jxvf linux-2.6.11.10.bz2
  # cd linux-2.6.11.10/

Линуксоиды постарше любят добавлять в стандартное ядро патчи сторонних производителей. Особенно это касается всевозможных секъюрити-патчей. На домашние машины люди ставят еще больше всяких примочек типа поддержки lirc (чтоб комфортно управлять mplayer-ом с пульта ДУ) или supermount для автоматического монтирования cdrom - аля windows. Линков не даю специально, т.к. эта информация быстро устаревает. Пользуйтесь Google. Запрос типа linux kernel patch выдаст море таких ссылок. Стоит только заметить, что применять заплатки стоит осторожно. Часто бывает, что их нужно немного вручную подправить т.к. они не успевают за релизами ядер, поэтому патч для ядра скажем 2.6.4 придется пригладить напильником, чтобы наложить на 2.6.11, при этом результат может быть непредсказуемым. Хорошенько подумайте - стоит ли так рисковать для сервера?

После того как ядро распаковалось, нам нужно его настроить. Есть аж пять способов сделать это:
  1. Вручную, внося изменения в файл .config
  2. make menuconfig - мой любимый
  3. make xconfig - для любителей иксов
  4. make gconfig - гномовский интерфейс так хотелось написать для любителей гномов :)
  5. make config - для любителей отвечать на вопросы

    На мой взгляд самый удобный и наглядный способ, это make menuconfig . Набираем понравившуюся команду. menuconfig и oldconfig можно запускать прямо из консоли. А для остальных придётся грузить иксы.

Здесь я не буду описывать все опции нового ядра. Зачем делать, то что уже сделано до меня? Поэтому отсылаю вас к статье "Ставим ядро 2.6, или Ядерная физика для домохозяйки.". Там прекрасно описаны все параметры ядер 2.6.

Я опишу только те параметры ядра, которые необходимы для работы сервера. Кстати почти все возможности ядра я включаю в ядро. Но оставляю возможность загрузки модулей. Т.к. как известно, что руткиты (проги для управления взломанным компом) это в основном модули для ядра. А когда модулей мало и ты их знаешь по именам. Трудно не заметить этот самый руткит. Конечно такое случается гиперредко, но бережёного бог бережёт. А модули не стоит выкидывать совсем, хотя бы потому, что дрова от нвидии не поставятся.

Сначала немного о файловых системах. На серверах, в дополнение к основным файловым системам, надо добавить те которые используются в вашей сети. Например, если в сети есть компьютеры с Mac OS, то логичным было бы включить поддержку этой fs в разделе miscellaneous filesistems . Также нужно включить все языковые кодировки используемые в сети. Делается это в Native Language Support . Ещё для монтирования дисков с других компьютеров было бы логично использовать NFS - в UNIX ориентированных сетях, и SAMBA в win сетях. Я использую обе системы сразу.

Включаем:
  File systems >
    Network File Systems >
      NFS File System support
      NFS Server support
      SMB File System support

У меня в сети стоят несколько компов с win9x и NT:
  File systems >
    DOS/FAT/NT Filesystems >
      VFAT (Windows-95) fs support
      NTFS file system support

Включаем русские кодировки для корректной работы с Windows:
  File systems >
    Native Language Support >
      Base native language support >
        Codepage 855 (Cyrillic)
        Codepage 866 (Cyrillic/Russian)
        NLS ISO 8859-5  (Cyrillic)
        NLS KOI8-R (Russian)

Как основную систему я использую ext3, она понадёжнее ext2 будет:
  File systems >
    Ext3 journalling file system support
    Ext3 extended attributes >
      Ext3 POSIX Access Control Lists

Вторая строка добавит поддержку ACL. Дополнительные возможности настройки доступа к файлам. Вот небольшой пример:
  #ls -l
  права         user      group size date       time  file_name
  -rw-r--r--  1 test_user users 7038 2005-05-21 22:04 test
  # getfacl test
    file:test
    owner:1001
    group:1001
    user::rw-
    group::r--
    other::r--
  # setfacl -m u:vasja:rw-
  # getfacl test
    file:test
    owner:1001
    group:1001
    user::rw-
    group::r--
    other::r--
    vasja::rw-
Т.е. в данном случае мы конкретно пользователю Вася разрешаем доступ на запись к файлу тест

Эту возможность советую включить - иногда очень полезная штука.

С файловыми системами все. Дальше займёмся секюрьностью. В новой версии ядра появилась новая интересная возможность:
  Security options >
    Enable different security models >
      BSD Secure Levels

Вкратце, это система уровней защиты как во FreeBSD. Например на уровне защиты 0, это обычный Linux. На первом нельзя(даже руту) загружать дополнительные модули ядра. Для чего это нужно я писал где-то выше. А уровень два не разрешает даже сменять уровни защиты. Т.е. внести какие-то изменения в ядро просто невозможно. Подробнее рассматривать это не буду. Это тема для отдельной статьи. Пока не советую это включать, если только у вас нет опыта работы с freebsd.

Первое, что необходимо для сервера это конечно же поддержка сети, а иначе зачем он тогда нужен? включаем:
  Device Drivers >
    Networking support
    Network device support

включаем поддержку для своей сетевой карты:
  Device Drivers >
    Ethernet

без этого ничего работать не будет:
  Device Drivers >
    Networking support >
      Networking options >
        Packet socket
        TCP/IP networking

Если предполагается использовать IPSec(его использует VPN), то следует включить:
  Device Drivers >
    Networking support >
      Networking options >
        IP: AH transformation
        IP: ESP transformation
        IP: IPComp transformation
        IPsec user configuration interface
  Cryptographic options >
    Cryptographic API >
      HMAC support
      Null algorithms

Если надо использовать PPPoE или сервер к нету подключён через dial-up :) то добавляем
  Device Drivers >
    Network device support >
      PPP (point-to-point protocol) support
      PPP over Ethernet

Включаем поддержку iptables - что за сервер без файрвола?
  Device Drivers >
    Networking support >
      Networking options >
        Network packet filtering

В под меню выключаем debug - это сильно тормозит работу iptables
Заходим в подменю Netfilter configuration Тут начинается самая важная часть, итак включаем:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           Connection tracking

 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           Connection tracking >
             Connection tracking flow accounting

Следующие опции нужны для маскарадинга соответствующих протоколов:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           FTP protocol support
           IRC protocol support

протокол загрузки для бездисковых станций:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           TFTP protocol support

сам иптаблес:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           IP tables support

поддержка разных критериев фильтрации - я включаю все
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           limit math support
           ...
           hashlimit math support

остальные настройки iptables:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           Packet filtering

 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           Packet filtering >
             REJECT target

возможность внесения в логи инфы о заголовках пакетов:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           Packet filtering >
             LOG target support
             ULOG target support

это и все подопции - для маскарадинга
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           Full NAT

фильтрация по ARP таблицам:
 Device Drivers >
   Networking support >
     Networking options >
       Network packet filtering >
         IP: Netfilter Configuration >
           ARP tables support
           ARP tables filtering

Вроде все с серверными настройками разобрались. Настройте все остальное, по своему усмотрению. Например можно вычистить из device drivers все драйвера которых у вас нет. И ещё дам совет: не оставляйте в ядре то что может пригодится когда-нибудь, пока это когда-нибудь наступит, уже новое ядро выйдет.

А ещё чуть не забыл... Когда переходил на новое ядро вдруг пропала красивая консолька (1024x768*256 с пингвином в углу), а вместо неё появились буквы, на по экрана каждая :). Решается это так: добавляем:
  Device drivers >
    Graphic Support >
      Support for frame buffer devices >
        VESA VGA Graphic Support
      Console display driver support >
        VGA text console >
          video mode selection support
        frame buffer console support

счастливых обладателей карт от NVidia, которые увидели опцию NVidiaRiva support хочу огорчить: если включить эту функцию, то кроме чёрного экрана вы ничего не увидите ;) По крайней мере у меня так было.
выбираем насколько пёстрый будет пингвин:
  Device drivers >
    Graphic Support >
      Logo configuration >
        Bootup logo >
          Standard 224-color Linux logo

Теперь точно все...

Компилируем:
  # make bzlilo modules modules_install install

Лезем в /etc/lilo.conf, проверяем добавилось ли новое ядро в загрузку или нет Если там нет строчки
  image=/vmlinuz
то перед строкой
  image=/boot/vmlinuz
вставляем вот это
  image=/vmlinuz
  # где у вас там лин стоит...
    root=/dev/hda1
    label= linux_2.6
    read-only
Перезагружаемся...
  # reboot
После перезагрузки можно настраивать NAT, iptables, сетевых демонов. Но это уже совсем другая история.

P.S. Для корректного перехода с 2.4 на 2.6 необходимо также заменить старый /etc/rc.d/rc.modules на новый, т.к. в свежем ядре не только добавились новые модули, но и изменились названия некоторых старых. По большому счету изменений довольно много и со старым менеджером загрузки модулей далеко не уедешь. При наличии 2го установочного диска Slackware версии не ниже 10.0 вы найдете этот файл внутри пакета /mnt/cdrom/testing/linux-2.6.XX/kernel-modules-2.6.XX-i486-X.tgz. Просто установите его как обычно или вручную выдерните из него /etc/rc.d/rc.modules-2.6.XX.new. Далее следует его отредактировать раскомментировав строчки используемых вами модулей ядра. Посмотреть какие именно функции ядра вы оформили модульно можно в том же файле /usr/src/linux-2.6.11.10/.config. Кстати, при внимательном изучении, там вы найдете уже готовое решение для простейшего сетевого экрана и NAT с поддержкой корректной трансляции ftp и icq пакетов.
Возможно, при компиляции каких-либо драйверов, например ADSL-модема, вы столкнетесь с ошибкой в заголовочных файлах. В этом случае нужно будет скопировать заголовочные файлы нового ядра в /usr/include:

 # cp -rf /usr/src/linux-2.6.11.10/include/ /usr/

Однако, при отсутствии таких проблем, лучше этого не делать, т.к. вся система заточена под 2.4 и главная библиотека glibc собрана с использованием именно старых *.h файлов. Все с нетерпением ждем очередного релиза Slackware, где базовым ядром будет уже 2.6. Текст оригинальной статьи: RiboZz RiboZz[antispam]gmail.com Gena 08.06.2005