Denis Yuriev

Записки бездельника

Главная » Linux » Debian Linux - сборка ядра

Debian Linux — сборка ядра

В голове зреют несколько статей, в которых вынужден буду ссылаться на материал по сборке ядра Linux.
Так как в интернете материал либо устаревший, либо труден для восприятия простому обывателю, то придется заняться вот таким трудом Сизифа.
Под катом актуальный мануал по сборке ядра для Debian 7.

Зачем пересобирать ядро?

О, мой друг.. Подобный вопрос зачастую вызывает целые холивары и баталии в сообществе линуксоидов.
В ответе на данный вопрос я лишь выскажу свою позицию и не претендую на единственную возможную истину.

Быстродействие операционной системы

Именно с данной целью зачастую пересобирают ядро изменяя какие-либо флаги.

Немного отступлюсь и расскажу Вам об одном золотом правиле.

Существует такой ментальный Закон Парето, он же принцип Парето, он же принцип 20/80

20% усилий дают 80% результата, а остальные 80% усилий — лишь 20% результата

Кстати правило предложено Ричардом Кохом, а впервые заметил такую закономерность Вильфредо Парето, в честь которого и названо. Но это лишь экскурс в историю.

Так вот я к чему. При любой оптимизации начинайте с очевидно слабых мест.

Если у вас 512 мб оперативной памяти и процессор Celeron 4 2ГГц, а вы вынуждены работать одновременно с 20 вкладками в браузере, то оптимизировать Вам надо явно не ядро операционной системы.

Данную ситуацию если наложить на описанный выше закон, то получится примерно следующая ситуация.
80% времени и усилий Вы потратите на поиск ключей в ядре, которые необходимо поменять, чтобы получить 20% прирост производительности при работе с браузером.
15% времени и усилий Вы потратите на пересборку браузера, которая даст Вам прирост производительности в 30%.
5% времени и усилий Вы потратите на докупку оперативной памяти, которая даст Вам прирост производительности в 50%.

И это лишь адаптация к закону.

На практике лучше купить на барахолке за 3000 рублей новый системник с более-менее адекватными комплектующими и работать комфортно, а не пересобирать ядро в надежде получить какой то прирост.

Запомните, не пересобирайте ядро в надежде получить прирост производительности в 2-3 раза, если Вы не уверены, что какие-то изменения в ядре дадут необходимый результат.

Поддержка оборудования

Вот это уже более реальная ситуация. Обычно случается с экзотическим оборудованием, поддержка которого почему то отключена в ядре авторами дистрибутива.
Но и тут убедитесь, что модуль ядра реально отсутствует. Иногда достаточно его подгрузить и жить становится гораздо легче.

Индивидуальные ситуации

Иногда настройки ядра по умолчанию нам не подходят. Такое бывает.

Например, пересборка ядра в embended-устройствах (роутеры, NAS-серверы) позволит сэкономить сотню-другую килобайт полезного дискового пространства. Для пользователей полноценных десктопных и серверных станций цифры такого порядка покажутся смешными, но мне бывало не до смеха, когда система не «влезала» на устройство, потому что необходимо было уменьшить её размер на 50 килобайт.

Пересборка ядра Linux

Как следует из названия статьи, заниматься пересборкой ядра мы будем в среде Linux Debian.

Получение исходных кодов ядра

В большинстве статей рекомендуют получить исходные коды на сайте kernel.org.
Однако не рекомендую Вам этим заниматься, если не понимаете, зачем оно Вам надо.
Мы с Вами будем получать исходный код ядра из репозиториев дистрибутива.
Посмотрим доступные версии

~$ apt-cache search linux-source
linux-source-3.2 - Linux kernel source for version 3.2 with Debian patches
linux-source - Linux kernel source (meta-package)
linux-source-2.6 - Linux kernel source (dummy package)

Обратите внимание на строку

linux-source - Linux kernel source (meta-package)

Это так называемый мета-пакет. Сам он по себе пустой, однако ссылается на другие. В нашем случае — на последнюю версию исходников ядра.
Иными словами, нам достаточно выполнить команду

$ sudo apt-get install linux-source

чтобы получить самые свежие из доступных исходные коды.
Теперь создадим каталог, в котором будете выполнять далее операции по сборке.
И сразу зайдем в него

$ mkdir ~/mykernel
$ cd ~/mykernel

Теперь посмотрим на содержимое каталога, куда должен был скачаться архив с исходниками

$ ls /usr/src -1
linux-patch-3.2-rt.patch.bz2
linux-source-3.2.tar.bz2

linux-patch-3.2-rt.patch.bz2 — RT-патч. Скорее всего Вам он не нужен, по этому не будем заострять на него внимание в рамках данной статьи.
linux-source-3.2.tar.bz2 — архив с исходным кодом.
Распакуем его в подготовленный нами каталог

~/mykernel$ tar xjf /usr/src/linux-source-3.2.tar.bz2

В подготовленном каталоге появился подкаталог linux-source-3.2
Переходим в него:

$ cd ~/mykernel/linux-source-3.2

Дополнительные пакеты для сборки ядра

Нам понадобятся еще некоторые пакеты для сборки ядра. Самое время установить их.

$ sudo apt-get install fakeroot kernel-package libncurses5-dev

Если собираете на удаленной машине, то будет не лишним так же обзавестись виртуальным терминалом, а то будет неприятно, если вдруг интернет пропадет:

$ sudo apt-get install screen

Настройка исходников ядра

Теперь создадим начальный файл конфигурации.
Сделать его можно несколькими способами:

  • $ make defconfig

    Создаст конфигурацию по умолчанию для ядра.

  • $ make oldconfig

    Скопирует конфигурацию текущего ядра.
    Отличный вариант для новичков.

  • $ make localmodconfig

    Создаст автоматически конфигурацию для устройства на котором данная команда была запущена. Поддержка большинства устройств будет в виде модулей.
    Так же отличный вариант для новичков. Однако если какое то устройство было не подключено в момент вызова команды, то можете лишиться поддержки его в будущем.

  • $ make localyesconfig

    Аналогично предыдущему пункту, только модули будут включены в само ядро

Если к компьютеру ничего более подключать не планируете (идеально для серверов, к которым новое устройство подключается крайне редко), то рекомендую последний вариант:

$ make localyesconfig

Теперь самое время настроить ядро тем самым образом, ради чего мы сюда пришли.

$ make menuconfig

Откроется псевдографический интерфейс с различными настройками. Делаем то, что нам необходимо, сохраняем и закрываем.
Не буду приводить примеры в рамках данной статьи, так как в ближайшем будущем не раз буду на неё сам ссылаться.

Компиляция ядра

Ну вот и приступаем к самому важному и долгому этапу.
Если вы собираете ядро на удаленной машине, то запускаем сессию screen:

$ screen

Если на компьютере, который перед Вами, то просто читаем дальше.

И вот. Не совсем момент истины, но всё же.

fakeroot make-kpkg -j 2 --initrd --revision=mykernel kernel_image

Команда запустит процесс сборки ядра.
-j 2 — указываем, что запускаем в два потока (количество ядер процессора +1, чтобы не терять процессорного времени на операциях ввода-вывода)

Операция длится от пятнадцати минут, до нескольких часов. В особо проблемных случаях может занять более суток времени.

В случае успеха в каталоге с исходниками увидим файл

linux-image-версия_ядра.deb

Установить его можно командой

$ dpkg -i linux-image-*.deb

Ну и всё, профит.
Не прощаемся, еще не раз сюда вернемся ;-)

Сделай приятное автору - поделись статьей в социальной сети.

12 Комментариев

  1. devilwalker

    Спасибо. давно интересуюст данным вопросом.

  2. devilwalker

    если есть возможность Денис то оставте свои контакты!

  3. Денис Юрьев

    По причине моей дикой лени и нелюбви отвечать на вопросы без возможности обдумать ответ, Вам удобнее будет оставлять вопросы в комментариях в наиболее близких по теме статьях.

    если я в состоянии на них ответить, то скорее всего ответ будет в виде развернутой подробной статьи.

  4. devilwalker

    Напишите статью как оптимизировать Дебиан7 для hlds.

  5. devilwalker

    именно на вдс. Говорят пересборка ядра на вдс бесполезна!

  6. Денис Юрьев

    Есть опыт пересборки и на VPS и на VDS. RT только не использовал.
    На последнем билде, включая бету — бесполезно. Разницы никакой для игрока.

    Главное, чтобы не OpenVZ

    Чтобы избежать периодических фризов кратковременных на многоядерном VDS — обычно достаточно привязать hlds к определенному ядру.

  7. Денис Юрьев

    -pingboost 1
    sys_ticrate 750

    минимум плагинов и актуальные античиты

    этого мне хватило для самораскрутки сервера за 4 месяца.
    пару дней назад поднял второй сервер — потихоньку и там народ подтягивается.

    RT-патч тестировать сейчас не на чем)

  8. devilwalker

    Использую только KVM

  9. devilwalker

    Могу предоставить тест КВМ на 5 дней

  10. devilwalker

    можно ип сервера?

  11. devilwalker

    На последнем билде, включая бету — бесполезно. Разницы никакой для игрока.

    Ну если нет разници то ладно! Использую 6153 бету. Всегда стараюсь все обновить!

Оставьте комментарий

Войти с помощью: 
Denis Yuriev DMOZ Индекс цитирования

© 2017