- Zen Kernel — зачем ползать если можно летать?
- Ядро Zen
- Что включено в Zen-ядро?
- Отличие между zen.git и zen-stable.git
- Zen-Stable.git
- Zen.git
- Kernel (Русский)
- Contents
- Официальные ядра
- Компиляция
- Ядра kernel.org
- Неофициальные ядра
- Отладка регрессий
- Zen-kernel или Дзен-ядро для Debian GNU\Linux
- Привет, дорогой читатель!
- Zen Kernel
- Что из себя представляет Zen Kernel?
- Как ставить?
- Термоядерный синтез: Обзор патчей для Linux, не входящих в ванильное ядро
- Содержание статьи
- Какими бывают линуксы
- linux-rt
- ReiserFS
- Grsecurity
- Zen-kernel
- Универсальная сборка
- Компиляция. Debian-way
- make complete
- Скажи «нет!» ребуту
- Турбо-компиляция
Zen Kernel — зачем ползать если можно летать?
Уже около месяца в моем Arch Linux крутится zen kernel. Довольно неплохо обработанное напильником, с кучей пачтей и дополнительных фич не входящих в ванильное ядро. Сегодня я расскажу что же оно есть такое и чуток углублюсь в дебри 🙂
Ядро Zen
Zen представляет собой вариант ядра Linux, который предназначен для настольных компьютеров. Это «исправленный» Linux для настольных/не-серверных систем, использует комбинацию нескольких проектов, обновляет код через git-репозиторий, а так же имеет несколько специфичных для Zen вещей стремящихся удовлетворить большинство потребностей пользователей реализовав их в одном ядре. Некоторые примеры слияния кодов это drm-next, wireless-testing, выбор планировщиков CPU (CFS/BFS), BFQ планировщик ввода-вывода, aufs, unionfs, reiser4, tuxonice, PHC, и многие другие замечательные вещи которые замечательно подойдут для улучшения настроек настольных или ноутбук систем или просто код улучшающий производительность настольных систем. Однако объединенный код может изменится в любой момент. Так же, «передовые технологии» такие как drm-next, wireless-testing, linux-2.6.git, или что-то другое по сути дела являющееся «передовыми разработками» слиты с кодом только в нестабильной ветке (zen.git).
Основной целью является удовлетворение запросов людей в различных областях, запускающих ядро Linux на непроизводственных машинах . Эти области включают в себя производительность, драйверы/новейшие драйверы, и новые «фичи» (новые возможности могут включать в себя все — от файловых систем до tuxonice). Вторая цель — предоставление тестового полигона для новинок включаемых, но не принятых в основное ядро Linux. Это обеспечивает разработчиков такого кода большой базой тестеров которые особенно ценны, когда необходимо поправить несколько ошибок в скрипте, или найти проблемы при работе на различном оборудовании.
Что включено в Zen-ядро?
Код включаемый в zen ядро может быть разным в разное время. Несколько примеров проектов которые были последовательно объединены с zen: bfs/zen-sched, bfq i/o планировщик, aufs, reiser4, tuxonice, smapi, linux PHC, mactel, gc-linux, fbcondecor, cko, и другие. Это не точный список того что указано на сайте, и он может изменяться от релиза к релизу.
Если вам интересно знать что включается в zen ядро в любой момент времени, посетите gitweb и прочитайте, или поищите в логах git. Интерфейс gitweb отображает все вносимые правки с пояснениями к ним, а так же все ветки которые существуют в дереве. Эта информация отображается для текущей ‘master’ ветки дерева и для любой существующей метки (вы так же можете вернуться назад и посмотреть старые релизы).
Как альтернатива этому — это подробная документация включающая даже документацию к проектам включенным в Zen ядро, она может быть найдена на странице Документации.
Отличие между zen.git и zen-stable.git
Zen-Stable.git
- Создается на основе последнего стабильного ядра: нет RC ядер (2.6.X.Y)
- Не имеет репозитория новинок для будущего слияния с основным кодом (нет drm-next, sound-2.6.git, wireless-testing, или любых других «тестовых» деревьев)
- Не включает код «просто посмотрите работает ли это»
- Имеет только stable + stable zen метки (нет -rc меток)
Zen.git
- Берется из linux-2.6.git: -rc/git ядра (2.6.X-rcY)
- Имеет git-репозиторий нововведений (drm-next, sound-2.6.git, wireless-testing)
- Новые проекты которые хотят протестить включаются сюда, смотрят как они работают в Zen.git, если все нормально и стабильно то можгут быть включены в zen-stable.git.
- Только unstable + unstable zen метки (только -rc метки)
Вам не требуется клонировать оба zen-stable.git и zen.git если вам хочется использовать оба дерева одновременно! Прочитайте «Как переключаться между zen-stable и zen в одном древе»
Так вы сможете получить все метки (не только -rc или stable метки), и получить оба древа в одном.
Источник
Kernel (Русский)
Ядро Linux — ядро операционной системы, соответствующее стандартам POSIX, составляющее основу операционных систем семейства Linux.
Дистрибутив Arch Linux основан на ядре Linux. Помимо основной стабильной (stable) версии в Arch Linux можно использовать некоторые альтернативные ядра. В статье описываются доступные в официальных репозиториях версии ядер, возможные патчи, а также способы, которыми пользователи могут скомпилировать собственное ядро.
Пакет ядра устанавливается в файловую систему в каталоге /boot/ . Для загрузки нужного ядра при запуске системы необходимо соответствующим образом настроить загрузчик.
Contents
Официальные ядра
Помощь при работе с официальными ядрами можно найти на форуме и в баг-трекере.
- Stable — «ванильное» ядро Linux с модулями и некоторыми патчами.
https://www.kernel.org/ || linux
- Hardened — ориентированное на безопасность ядро Linux с набором патчей, защищающих от эксплойтов ядра и пространства пользователя. Содержит больше защитных особенностей, чем linux .
https://github.com/anthraxx/linux-hardened || linux-hardened
- Longterm — ядро и модули с долгосрочной поддержкой (Long Term Support, LTS).
https://www.kernel.org/ || linux-lts
- Zen Kernel — результат коллективных усилий исследователей с целью создать лучшее из возможных ядер Linux для систем общего назначения. Подробности проекта можно найти на сайте liquorix.net (там же можно скачать двоичные файлы Zen-ядра для Debian).
https://github.com/zen-kernel/zen-kernel || linux-zen
Компиляция
Скомпилировать собственное ядро можно двумя способами:
/Arch Build System Преимущества — наличие готового PKGBUILD для пакета linux и удобство системы управления пакетами. /Традиционная компиляция Ручная загрузка архива файлов с исходными кодами ядра и их компиляция.
Файлы конфигурации пакетов с ядрами Arch можно найти в исходниках (например, файл [1] из linux ). Если включена опция ядра CONFIG_IKCONFIG_PROC , то файл /proc/config.gz содержит настройки ядра, которое работает на вашей машине в данный момент.
Некоторые из перечисленных пакетов могут быть также доступны в двоичном виде в неофициальных репозиториях.
Ядра kernel.org
- Git — ядро Linux, собранное из файлов с исходным кодом из git-репозитория Линуса Торвальдса.
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git || linux-gitAUR
- Mainline — ядра, в которых появляются все нововведения. Выходят каждые 2-3 месяца.
https://www.kernel.org/ || linux-mainlineAUR
- Next — самые новейшие ядра, с улучшениями, которые будут добавлены в следующий mainline-выпуск.
https://www.kernel.org/doc/man-pages/linux-next.html || linux-next-gitAUR
- Longterm 4.4 — LTS-ядро версии 4.4.
https://www.kernel.org/ || linux-lts44AUR
- Longterm 4.9 — LTS-ядро версии 4.9.
https://www.kernel.org/ || linux-lts49AUR
- Longterm 4.14 — LTS-ядро версии 4.14.
https://www.kernel.org/ || linux-lts414AUR
- Longterm 4.19 — LTS-ядро версии 4.19.
https://www.kernel.org/ || linux-lts419AUR
- Longterm 5.4 — LTS-ядро версии 5.4.
https://www.kernel.org/ || linux-lts54AUR
Неофициальные ядра
- Aufs — совместимое с aufs ядро Linux. Полезно при работе с Docker.
http://aufs.sourceforge.net/ || linux-aufsAUR
- Ck — патч от Con Kolivas, повышение быстродействия для настольных систем с любым типом нагрузки.
http://ck.kolivas.org/ || linux-ckAUR
- Clear — патчи проекта Clear Linux от Intel. Содержит улучшения производительности и безопасности.
https://github.com/clearlinux-pkgs/linux || linux-clearAUR
- GalliumOS — ядро Linux с патчами GalliumOS для Хромбуков.
https://github.com/GalliumOS/linux || linux-galliumosAUR
- Libre — без проприетарных или обфусцированных драйверов устройств.
https://www.fsfla.org/ikiwiki/selibre/linux-libre/ || linux-libreAUR
- Liquorix — ядро, собранное из исходного кода Zen с настройками для Debian. Разработан для настольных, мультимедийных и игровых систем, часто используется в качестве замены основному ядру Debian. Создатель патча Liquorix, Damentz, также является разработчиком набора патчей Zen.
https://liquorix.net || linux-lqxAUR
- MultiPath TCP — ядро с поддержкой Multipath TCP.
https://multipath-tcp.org/ || linux-mptcpAUR
- pf-kernel — набор неплохих улучшений, не вошедших в mainline. Сопровождается разработчиком ядра. Предоставляет порты улучшений для новых версий ядра, если они не были выпущены официально. Наиболее важные нововведения — UKSM и планировщик процессорного времени PDS.
https://gitlab.com/post-factum/pf-kernel/wikis/README || Пакеты:
- Репозиторий разработчика pf-kernel, post-factum.
- Репозиторий с пакетами linux-pfAUR и linux-pf-preset-defaultAUR от создателя форка pf-kernel, Thaodan.
- linux-pf-gitAUR от yurikoles
- Realtime kernel — поддерживается небольшой группой разработчиков, возглавляемой Ingo Molnar. Патч позволяет применять kernel preemption практически ко всему ядру за исключением небольших участков кода («raw_spinlock critical regions»). Этого удалось добиться за счёт замены большинства спинлоков ядра на мьютексы с поддержкой наследования приоритета, а также перемещением всех прерываний (в том числе и программных) в потоки ядра.
https://wiki.linuxfoundation.org/realtime/start || linux-rtAUR , linux-rt-ltsAUR
- Tkg — ядро с набором патчей для планировщиков PDS и Project C / BMQ. Стандартный планировщик CFS также доступен. Изменения нацелены на улучшение баланса интерактивность/производительность в играх. Автор и сопроводитель — Etienne Juvigny (Tk-Glitch).
https://github.com/Frogging-Family/linux-tkg || not packaged? search in AUR
- VFIO — патч ядра от Alex Williamson с поддержкой PCI Passthrough для KVM на некоторых машинах.
https://lwn.net/Articles/499240/ || linux-vfioAUR , linux-vfio-ltsAUR
- XanMod — улучшение производительности ядер рабочих станций, игровых компьютеров, медиацентров и других систем. Включает планировщик MuQSS, планировщик ввода-вывода BFQ, алгоритм дедупликации памяти в реальном времени UKSM, алгоритм управления перегрузками TCP BBR, расширенный набор команд для архитектуры x86_64 и другие изменения.
https://xanmod.org/ || linux-xanmodAUR
Отладка регрессий
Прежде всего проверьте ядро linux-mainline AUR на предмет того, не была ли проблема уже решена. В прикреплённом комментарии указан репозиторий с уже собранными ядрами, так что собирать ядро вручную не придётся.
Если проблема проявляется не слишком часто, то имеет смысл попробовать LTS-ядро ( linux-lts ). Старые версии LTS-ядер можно найти в архиве Arch Linux.
Если избавиться от проблемы не удалось, попробуйте локализовать баг в linux-git AUR , после чего сообщите о нём в баг-трекер ядра. Важно проверять ванильное непропатченное ядро, чтобы убедиться, что причиной ошибки является не патч. Если проблемы вызывает патч, то сообщите об этом его автору.
Источник
Zen-kernel или Дзен-ядро для Debian GNU\Linux
Привет, дорогой читатель!
В этот раз я кратко расскажу тебе о замечательной пропатченной сборке ядра, под названием Zen Kernel!
Zen Kernel
Вот поставил вместе с официальными Linux ядрами из дистрибутива так же пропатченое проектом Zen Kernel ядро. Памяти стало кушать меньше и отзывчивость стала больше! Есть ради чего ставить! Ставить ядро нынче легко, не то что в былые седые годы. Хотя я их тоже не застал! Все очень просто, и все так же просто как и с установкой ядра из официального источника, такого как дистрибутив или kernel.org!
Что из себя представляет Zen Kernel?
Zen Kernel — набор патчей на официальное ядро Linux, которые вносит изменения для получения лучшей отзывчивости и производительности системы. Автоматически Zen Kernel получает исходные коды официального ядра через Git и синхронизирует патчи с ним. Так что получаем свежее ядро с патчами от Zen Kernel.
Zen Kernel использует комбинацию нескольких проектов, обновляет код через git-репозиторий, а также имеет несколько специфичных для Zen вещей, стремящихся удовлетворить большинство потребностей пользователей, реализовав их в одном ядре. Некоторые возможности патча: drm-next, wireless-testing, выбор планировщиков CPU (CFS/BFS), BFQ-планировщик ввода-вывода, aufs, unionfs, reiser4, tuxonice, PHC и многие другие вещи, которые замечательно подойдут для оптимизации настольных систем или ноутбуков. Всё это доступно в виде одного патча к ванильному ядру. (с) nixp.ru
Как ставить?
Качай архив с ядром, на текущий момент это версия 3.6.10 и ставишь по стандартному Debian-мануалу.
Скачать Zen-kernel
А вот и сам Debian-мануал, в котором нам нужно всего пару пунктов.
Мануал по установке
Поставили! Теперь можно наслаждаться производительностью!
Источник
Термоядерный синтез: Обзор патчей для Linux, не входящих в ванильное ядро
Содержание статьи
Есть много причин, по которым хорошую перспективную технологию могут не принимать в официальную ветку Linux — Линус славится своими жесткими требованиями к новому коду. Но от этого факта менее интересными такие технологии не становятся. И иногда ради них стоит пересобрать ядро с наложением стороннего патча.
Какими бывают линуксы
Ванильным (официальным) принято считать ядро, которое можно найти на kernel.org, и главным покровителем которого является сам Линус. На сайте можно скачать старое ядро ветки 2.4.x (которое уже практически не поддерживается) или несколько стабильных (или не очень 🙂 ) ядер ветки 2.6.x. Нестабильные ядра имеют суффикс «-rc», а ежедневные снапшоты из git’а – «rc-git». Обычно выходит 7-9 rc-релизов, прежде чем ядро обретает статус стабильного. В среднем, стабильные релизы выходят 4-5 раз в год, а последний на момент написания статьи релиз — 2.6.35.
linux-rt
Пожалуй, самый известный сторонний патч. Позволяет превратить обычный Linux в ОС реального времени. И хотя главное применение такой операционки – промышленные и встроенные системы, на обычном десктопе она тоже может быть интересна. Например, тем, кто часто занимается обработкой звука или видео или постоянно грузит систему какими-нибудь ресурсоемкими вычислениями. Встречаются также свидетельства о положительном эффекте от применения этого ядра на highload-серверах. Я же ничего, кроме слегка упавшей общей производительности системы, не заметил.
Скачать патч можно по адресу www.kernel.org/pub/linux/kernel/projects/rt/. Последняя стабильная версия – 2.6.33.6-rt27.
В некоторых дистрибутивах realtime-ядро уже присутствует в репозитории. Например, в Ubuntu для установки rt-ядра достаточно выполнить
$ sudo apt-get install linux-rt
В других же дистрибутивах ядро с этим патчем можно легко собрать. Для этого надо наложить патч на ванильное ядро и при конфигурировании указать опцию Processor type and features –> Preemption Mode (Complete Preemption (Real-Time)). И еще рекомендуется отключить опцию Kernel hacking –> Check for stack overflows, так как она повышает латентность. Чтобы можно было собирать некоторую статистику по времени отклика, при конфигурировании нужно также включить: Kernel hacking –> Tracers –> Kernel Function Tracer, Interrupts-off Latency Tracer, Interrupts-off Latency Histogram, Preemption-off Latency Traver, Preemption-off Latency Histogram, Scheduling Latency Tracer, Scheduling Latency Histogram, Missed timer offsets histogram.
После сборки ядро должно содержать в имени PREEMPT и RT, например:
#1 SMP PREEMPT RT Wed Aug 4 00:40:34 YEKST 2010
Чтобы потешить собственное самолюбие, можно включить сбор статистики:
# echo 1 >/sys/kernel/debug/tracing/latency_hist/enable/wakeup
Саму статистику смотрим тут:
$ grep -v » 0$» /sys/kernel/debug/tracing/latency_hist/wakeup/CPU0
Самое интересное там: значения минимального, среднего и максимального времени отклика.
Широко известный в узких кругах анестезиолог-линуксоид Кон Коливас с переменным успехом поддерживает собственную ветку (точнее, набор патчей) Linux. Главным нововведением в его патчсете является новый планировщик BFS (Brain Fuck Scheduler), являющийся альтернативой стандартному CFS и показывающий, по результатам тестов, улучшенную отзывчивость ядра на десктопе (другими словами, при использовании BFS жадные до графических ресурсов приложения получают ощутимый прирост производительности, а раздражающие паузы, возникающие, например, при переключении между ресурсоемкими программами, которые требуют доступ к диску, становятся менее заметными, либо исчезают совсем).
Скачать исходники можно отсюда: www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/. После наложения патча (текущая версия – 2.6.34-ck1) станет доступна опция General Setup –> BFS cpu scheduler.
ReiserFS
Исходя из тестов и многочисленных отзывов, это очень быстрая файловая система. В настоящее время ее разработкой занимается наш соотечественник, Эдуард Шишкин, и группа энтузиастов. Эдуард полон оптимизма и решительности включить Reiser4 в ванильное ядро. Последний на момент написания статьи патч (reiser4-for-2.6.34.patch.gz) скачать можно здесь: ftp://ftp.kernel.org/pub/linux/kernel/people/edward/reiser4/reiser4-for-2.6/. После наложения патча появится опция File Systems –> Reiser4.
Но поддержка ядром ФС – это еще не все. Чтобы можно было оперировать с разделами reiser4, надо поставить reiser4progs. Во многих дистрибутивах этот комплект утилит есть в репозитории:
$ sudo apt-get install reiser4progs
Соответственно, основные операции с ФС:
- mkfs.reiser4 – создать раздел с reiser4;
- fsck.reiser4 – проверить раздел с reiser4;
- measurefs.reiser4 – посмотреть параметры раздела с reiser4.
Grsecurity
Патч, содержащий потрясающее количество механизмов для повышения защищенности Linux-системы. Опции компиляции grsecurity расположены в Security options –> Grsecurity. Есть три уровня безопасности на выбор: низкий, средний и высокий. Низкий уровень рекомендован, когда более высокие уровни не подходят из-за использования нестандартного набора ПО. Он содержит:
- защиту ссылок и FIFO – пользователям запрещается переходить по ссылкам (писать в FIFO), владельцем которых является другой пользователь;
- запрет пользователям на чтение dmesg – у всех пользователей, кроме root, отберут право на чтение системных сообщений ядра;
- начальную защиту chroot – рабочая директория для всех только что запущенных в песочнице приложений будет принудительно установлена в корневую директорию chroot.
В среднем уровне защиты дополнительно добавятся технологии:
- дополнительные ограничения для приложений, запускаемых в chroot: запрет монтирования и mknod (создание именованных каналов, специальных символьных и блочных файлов), запрет на двойной chroot, запрет на запись в sysctl и другое;
- ограничение прав на чтение /proc для пользователей, не входящих в заранее заданную группу (по умолчанию wheel);
- ограничение записи в /dev/kmem, /dev/mem и /dev/port;
- рандомизация адресного пространства;
- серьезное логирование подозрительных событий (неудавшихся вызовов fork(), попыток изменения системного времени, сигналов вроде SIGSEGV и подобных);
Высокий уровень еще больше затягивает узлы, так как дополнительно:
- ограничивает права на чтение /proc – теперь пользователи смогут читать из /proc информацию только о своих процессах. Можно также указать GID специальной группы, которая сможет читать любую информацию из /proc.
- накладывает ограничения на работу процессов в chroot-окружении: отключение возможности устанавливать suid-бит, отключение возможности посылать некоторые сигналы внешним процессам, ограничение на выполнение таких системных задач, как изменение системного времени или перезагрузка компа;
- добавляет дополнительное логирование (в том числе всех mount/umount);
- включает рандомизацию стека ядра;
- добавляет ограничение на чтение информации о ядре через системные вызовы для обычных пользователей (для root эта возможность остается).
Необязательно в качестве Security Level выбирать один из имеющихся уровней. Есть вариант Custom, позволяющий отдельно выбрать все необходимые опции. Еще одна интересная опция Grsecurity –> Sysctl support позволит включать/отключать параметры безопасности через sysctl без необходимости пересобирать ядро. Так как эта директива отрицательно влияет на общую безопасность системы, ее рекомендуется использовать лишь в тестовых целях.
Помимо уровней безопасности, при конфигурации можно включить/отключить RBAC (Role Based Access Control) – управление доступом на основе ролей. Управление пользователями и их ролями осуществляется с помощью специальной утилиты gradm2, присутствующей в большинстве дистрибутивов:
$ sudo apt-get install gradm2
Zen-kernel
Zen-kernel – наверное, самая большая пачка заплаток ядра в одном месте. Позиционируется как быстрое ядро для десктопов. Получить zen-kernel можно тремя способами:
- скачать архив с последним релизом (за номером 2.6.34-zen1);
- забрать версию с уже наложенными патчами из git’а;
- скачать патч для нужной версии и наложить самому.
У них есть два репозитория: zen-stable.git (с патчами, наложенными на стабильное ядро) и zen.git (синхронизация с git-хранилищем Линуса и наложение тестовых патчей).
Набор сторонних патчей меняется от релиза к релизу и на данный момент включает в себя:
- патчи от Кона Коливаса (в том числе BFS);
- Reiser4;
- Linux-PHC – проект, позволяющий снижать напряжение CPU для уменьшения энергопотребления и температуры;
- обновленные и добавленные дрова (для Lenovo ThinkPad SL, Gamecube/Wii, Macbook, WiFi-чипов и другого);
- Tuxonice – патч, реализующий продвинутый hibernate («спящий режим» – при выключении содержимое ОЗУ скидывается на винт, при включении – восстанавливается);
- поддержка FatELF – формата бинарников, содержащего в одном файле варианты для нескольких архитектур (аналог Universal Binary в Mac OS X);
- DazukoFS – виртуальная ФС, предоставляющая on access доступ к файлам. Широко используется различными антивирусами.
Универсальная сборка
Итак, ядро и патчи выбраны, можно приступать к сборке. Опишу сборку своего ядра на примере Ubuntu, хотя в других дистрибутивах последовательность действий будет аналогичной. Если нужно просто пересобрать имеющееся ядро (изменив опции конфигурации), то проще скачать исходники ядра с помощью стандартного менеджера пакетов твоего дистрибутива и собирать уже их:
$ sudo apt-get install linux-source
Но мне zen-kernel нравится больше, чем стандартное generic-ядро ubuntu, поэтому его и буду мучить. Поставим все, что может пригодиться для сборки:
$ sudo apt-get install build-essential libncurses5-dev \
libgtk2.0-dev libglade2-dev libqt3-mt-dev git-core
Добавим своего юзера в группу src, чтобы можно было без проблем собирать в /usr/src:
$ sudo usermod -a -G src adept
Клонируем git-репозиторий (приготовься скачать около 500 метров):
$ cd /usr/src
$ git clone git://zen-kernel.org/kernel/zen-stable.git linux-2.6-zen
Смотрим, какие ветки есть в репозитории:
$ git tag # кроме патченных, доступны также ванильные версии
Выбираем последнюю патченную версию:
$ git checkout v2.6.34-zen1
Сорцы не обязательно вытягивать из git. Если ты ограничен по трафику или скорости инета, то быстрее и дешевле будет скачать патч и официальное ядро. Заплатка накладывается следующим образом:
$ cd /usr/src/linux-2.6.34
$ zcat ../patch-2.6.35.bz2 | patch -p1
Утилита patch также имеет замечательную опцию ‘—dry-run’, позволяющую протестировать, как наложится патч, прежде чем его накладывать.
Далее выбираем способ конфигурирования ядра:
- make config – для тех, у кого уйма свободного времени. Система задаст несколько тысяч вопросов (по одному на каждую опцию конфигурации);
- make allnoconfig/allyesconfig – генерируется конфиг, в котором на все вопросы отвечено no/yes;
- make defconfig – конфиг с настройками по умолчанию;
- make randconfig – самый веселый способ – использует великий рандом для ответа на вопросы;
- make oldconfig – при использовании старого конфига. Задаст вопросы только про те пункты, которых не было в старом конфиге;
- make menuconfig – псевдографический, использующий ncurses, интерфейс;
- make nconfig – одно из нововведений ядра 2.6.35. Тоже псевдографический, использующий ncurses, интерфейс, но выглядит несколько более свежо, чем menuconfig;
- make xconfig – графический интерфейс на базе QT;
- make gconfig – графический интерфейс на базе GTK.
Мне больше привычен интерфейс menuconfig.
Какие-то конкретные советы по конфигурированию ядра давать сложно – все очень сильно зависит от имеющегося окружения и желаемых результатов. Но я всегда придерживаюсь нескольких простых правил:
- Все, что мне точно понадобится (в том числе поддержка ФС, на которой у меня /) и будет нужно часто, я включаю в ядро. Все, что может пригодиться или будет нужно редко – компилирую модулем. Все, что точно не пригодится, соответственно, выкидываем.
- Опции с пометкой EXPERIMENTAL лучше не включать без крайней на то необходимости. Также не рекомендуется включать Device Drivers –> Staging Drivers. Ядро может просто не собраться или работать не стабильно.
- Чтобы не путаться в ядрах, добавляю суффикс версии ядра в General Setup –> Local Version.
Также неплохой отправной точкой может стать конфиг дистрибутивного ядра.
После того, как конфиг готов (и сохранен в файл .config), можно приступать к сборке:
С помощью опции «-j» можно указать количество потоков, что немного ускорит компиляцию на многоядерном процессоре. В зависимости от мощности компа и опций конфигурации, ядро может собираться по часу и даже больше. После компиляции начинается установка:
$ sudo make modules_install
$ sudo make install
На самом деле модули просто скопируются в /lib/modules/, а ядро с конфигом – в /boot.
Создаем initrd для нашего нового ядра:
$ sudo update-initramfs -k v2.6.34-zen1 -c
Обновляем конфигурацию grub, чтобы он нашел новое ядро:
Все, можно идти в ребут, скрестив пальцы и затаив дыхание, загрузиться с новым ядром.
Компиляция. Debian-way
Выше я описал способ, которым можно собрать ядро в любом дистрибутиве. Но практически во всех дистрах есть свой путь, дающий те или иные плюшки, самая большая из которых — получение на выходе пакета с ядром, который можно легко поставить или удалить штатным пакетным менеджером.
В Debian/Ubuntu за сборку ядра отвечает make-kpkg. Для того, чтобы воспользоваться make-kpkg, установим один пакет:
$ sudo apt-get install kernel-package
Генерация конфига происходит точно так же, как и в способе выше, а сборка несколько иначе:
$ fakeroot make-kpkg —initrd —revision=mykernel \
kernel_image kernel_headers modules_image
Эта команда сначала соберет ядро, а потом создаст два пакета: linux-image-version-revision.deb (бинарник и модули ядра) и linux-headers-version-revision.deb (заголовочные файлы ядра), которые будут лежать в /usr/src.
Ставим то, что получилось, и идем на перезагрузку:
$ sudo dpkg -i /usr/src/*.deb
$ sudo reboot
make complete
К сожалению, журнал не резиновый, и рассказать получилось далеко не про все заслуживающие внимания патчи. За бортом остались OpenVZ и Xen, Openwall, а также целый класс патчсетов – дистрибутивные (ведь очень небольшое количество дистрибутивов использует ванильное ядро).
Скажи «нет!» ребуту
Допустим, у тебя есть высоконагруженный production-сервер, который должен быть доступен 24×7. Он отлично работает, да вот беда – вышел secutity-update ядра твоего дистрибутива, и надо бы перезагрузиться. Но ребут – это downtime сервера. И оставлять сервер с уязвимостью – тоже не дело. Придется искать второй сервер для временного переноса функционала с первого. Есть выход гораздо проще: можно обновлять ядро, не перезагружаясь, а используя ksplice.com – платный сервер обновлений для ядер распространенных дистрибутивов. Установка очень проста – добавляется репозиторий и ставится программулина uptrack. Потом делается
И все обновления установлены! Правда, «uname -a» все еще показывает старую версию. Зато
расскажет всю правду об установленных апдейтах.
В дополнение система еще имеет веб-интерфейс, где можно посмотреть статус всех своих подключенных серверов, умеет присылать на email уведомления о выходе новых патчей. И такое rebootless счастье стоит, в принципе, не так уж и дорого – $3,95 в месяц за один физический сервер (если серверов больше 20, то $2,95). Есть триальный доступ на 30 дней. А поддержка десктопной убунты вообще бесплатна.
В общем, сказка, если б не одно «но» – все это работает только со стандартным ядром твоего дистра – никаких тебе патчей и обновлений версий ядра.
Турбо-компиляция
Далеко не всегда получается с первого раза собрать идеально работающее ядро – обязательно забудешь включить какой-нибудь модуль или наложить какой-нибудь патч. А новая сборка, особенно на маломощном компе, может быть раздражающе долгой. В таком случае на помощь придет ccache, умеющий кэшировать результаты компиляции. В результате повторная пересборка проходит значительно быстрее. Для использования ccache при сборке ядра набирай
$ make CC=»ccache gcc» CXX=»ccache g++»
Весь кэш будет храниться в каталоге
/.ccache, а статистику по его использованию можно посмотреть с помощью команды
Источник