Сборка и установка ядра под Debian

    Тут речь идти будет не просто про компиляцию ядра Linux, а про компиляцию ядра и его сборку в deb-пакет. Потом этим deb'ом можно будет поделиться с знакомыми, похвастаться перед любимой девушкой/парнем или просто, при необходимости, использовать повторно.

    Для начала ставим пакеты fakeroot, kernel-package, libncurses5-dev:
    aptitude install fakeroot kernel-package libncurses5-dev

    Все зависимости будут подтянуты автоматом…
    Затем берём нужный архив с kernel.org и сливаем и распаковываем его в /usr/src (берём для примера ядро 2.6.31.4).
    $ cd /usr/src
    $ sudo -s
    # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.4.tar.bz2
    # tar xjf linux-2.6.31.4.tar.bz2
    # if [ -d linux ]; then rm linux; fi; ln -s linux-2.6.31.4 linux
    # cd linux

    Тут есть один момент. Так как у нас уже есть рабочее ядро в установленной системе то, если не хотим выставлять все галочки в конфигурации нового ядра с нуля, берём готовый config либо из /boot либо из /proc:
    # cp /boot/config-$( uname -r ) .config
    # zcat /proc/config.gz > .config

    В итоге имеем предварительную заготовку к конфигурации нашего нового ядра.

    Теперь конфигурируем ядро под специфические для нас цели, либо добавляем опции для новых модулей, либо… Одним словом — творчество:
    # make menuconfig

    Тут интересно будет отметить, что если мы сразу-же выйдем из меню, то можем увидеть что-то подобное этому:
    .config:903:warning: symbol value 'm' invalid for RFKILL_INPUT
    .config:2920:warning: symbol value 'm' invalid for DRAGONRISE_FF
    .config:2937:warning: symbol value 'm' invalid for GREENASIA_FF
    .config:2939:warning: symbol value 'm' invalid for THRUSTMASTER_FF
    .config:2940:warning: symbol value 'm' invalid for ZEROPLUS_FF

    имеет смысл найти эти опции при конфигурировании нового ядра и посмотреть что да к чему…
    Или, как мне подсказали, использовать:
    # make oldconfig

    для компиляции новой версии, которая все совпадающие опции трогать не будет, а насчёт остальных, которые изменились, спросит.
    Кстати, если кому интересно под X-ами заниматься конфигурированием, то может сделать так:
    # make xconfig

    Важно! Не забываем сказать «Kernel module loader» в «Loadable module support», так как возможны варианты.
    Ну всё. Пимпочки поотмечали, кнопочки понажимали, из окошек вышли, новый конфиг сохранили, теперь приступим к сборке. Для начала сделаем:
    # make-kpkg clean

    Увидим что-то наподобие этого:
    exec make kpkg_version=12.021 -f /usr/share/kernel-package/ruleset/minimal.mk clean
    ====== making target minimal_clean [new prereqs: ]======
    This is kernel package version 12.021.
    test ! -f .config || cp -pf .config config.precious
    test ! -e stamp-building || rm -f stamp-building
    test ! -f Makefile || \
               make    ARCH=i386 distclean
    make[1]: Entering directory `/usr/src/linux-2.6.31.4'
     CLEAN   scripts/basic
     CLEAN   scripts/kconfig
     CLEAN   include/config
     CLEAN   .config .config.old include/linux/autoconf.h
    make[1]: Leaving directory `/usr/src/linux-2.6.31.4'
    test ! -f config.precious || mv -f config.precious .config
    rm -f modules/modversions.h modules/ksyms.ver scripts/cramfs/cramfsck scripts/cramfs/mkcramfs

    Ну, а теперь, собственно, собираем ядро:
    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_image

    og.091015.00 — означает лишь ревизию нашей сборки (меньше букв, но больше цифр, иначе получите ошибку в под самый конц сборки и придётся всё повторять с самого начала), а в остальном может быть любой — у кого насколько фантазии хватит :)
    После того как предыдущая команда нормально выполнится, можно также дать такой «джентельменский набор»:
    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_headers
    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_manual
    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_doc
    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_source

    После этого получим набор из следующих deb-пакетов:
    • linux-image-2.6.31.4_og.091015.00_i386.deb
    • linux-headers-2.6.31.4_og.091015.00_i386.deb
    • linux-manual-2.6.31.4_og.091015.00_all.deb
    • linux-doc-2.6.31.4_og.091015.00_all.deb
    • linux-source-2.6.31.4_og.091015.00_all.deb

    располагаться они будут в /usr/src.
    Нам остаётся их только установить через dpkg:
    # cd /usr/src
    # dpkg -i ./linux-image-2.6.31.4_og.091015.00_i386.deb

    и т.д.
    Конфигурация к GRUB'у должна будет выполниться автоматически, равно как и собраться initrd.
    Финальный шаг:
    # reboot
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 35
    • 0
      А мне понравилось.

      Было бы круто если бы кто-нибудь сделал подробный обзор рюшечек ядра :) А то копаешься так, копаешься — и бац, чудо чудное находишь какое-нибудь, о котором и не подозревал — а оно выключено по умолчанию было :)
      • +2
        Вы — романтик)
        • +2
          Там слишком много опций. Сам сижу с генту и могу сказать, что если уделить время и почитать хелп к каждой опции — ядро собрать не сложно.
          • 0
            Велкам на страничку Грега Кроа, книжка Linux Kernel in a Nutshell бесплатна для скачивания. Там всё это есть.
            • 0
              а ещё — всех патчей по назначению :)
            • +2
              Ещё полезно указывать переменную окружения CONCURRENCY_LEVEL, если процессор умеет обрабатывать несколько потоков одновременно.
              • +3
                Кстати, для того, чтобы перегенерить конфиг от старой версии для компиляции новой, можно использовать команду make oldconfig, которая все совпадающие опции трогать не будет, а насчёт тех, которые изменились, спросит.
                • 0
                  Спасибо. Не знал. Добавил в статью.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Да уж… Действительно… С '97'го года ни одной документации не прочитал. /Ирония/
                      Если чего-то не знаю то это вовсе не значит, что читать маны не умею.
                      Знать всё, увыжаемый, невозможно.

                      И ещё… Если оригинал этой статьи /в более ранней редакции/ Вы видели где-то на linuxforum'е или, к примеру, на моём блоге то не надо говорить, что я её просто «содрал» у кого-то. А может наоборот? :(
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          Ой спасибо, уважаемый, чтобы я без этой ссылки делал. Всё пропало. Жизнь не имеет больше смысла.

                          Статья выше написана в первую очередь для тех кто:
                          • * плохо читает по английски;
                          • * кому нужна быстрая справка;
                          • * кому нужен просто толчёк в нужную сторону.


                          А если Вы, уважаемый, такой умный, то отчего же не делитесь своим богатым опытом с окружающими? Может корона мешает? Или мания величия? :(
                          • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь
                • +2
                  Прям какой-то день начинающих линуксоидов на Хабре.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Хотелось бы поправить, что не начинающих, а для начинающих.
                      Или мы все сразу с седой бородой родились?
                    • 0
                      offtop
                      Потом этим deb'ом можно будет поделиться с знакомыми, похвастаться перед любимой девушкой/парнем

                      Я понимаю, что это сарказм, но очень заинтересовался вопросом наличия людей, которые бы похвастались свежесобранным .deb'ом перед девушкой :D А что самое интересное: есть ли девушки, которые похвастаются перед парнями такого рода достижением!?
                      • 0
                        Есть у меня пара знакомых девушек — линуксоидов. Только они сами по себе пара и хвастаются друг перед другом :(
                        • +5
                          Если б я похвастался ядром перед девушкой, то она бы решила, что я ебанулся.
                          Хотя она это уже давно решила.
                          • +1
                            есть!:)
                            дважды есть. сначала хвасталась своим, а потом он передо мной хвастался улучшенным конфигом:)
                            • +2
                              У меня жена и дочка умеют :)
                              Дочке 8 лет. На этой неделе учил как пересобирать ядро убунты под видеокарту ее ноутбука.
                              Жена (PR директор фирмы производящей одежду для женщин) со смехом недавно рассказывала как у их админов челюсти пол пробили когда она начала им рассказывать как на роутере нужно iptables настроить так что бы внутренний FTP и снаружи был виден.

                              Так что стереотипное мышление — враг наш :)
                            • 0
                              Эх, вспомнил молодость! Романтика! Чтобы заработала 64-мегабайтная флэшка — ядро пересобери, в fstab запили. А скриншотами make xconfig можно потом потроллить виндузятников — вот дескать — сборка ядра, не сложнее установки этого вашего офиса.
                              А сейчас Ubuntu, и не только — убила всю романтику (вернее необходимость в ней). Но оно и к лучшему, по большому счету.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                • 0
                                  Так необходимости нет. Максимум что делал — initrd пересоздавал.
                              • 0
                                Что вы показать этой статьей?

                                Как только у новичка появляется потребность сделать что-то с ядром он идет в документацию к дебиану, а затем к ядру. И находит ровно столько же информации.
                                • 0
                                  Может уже хватит, господа профи? Есть люди, которым и такая статья будет не понятна. Особенно тем, кто шагнул из Окна. Спасибо автору. Доходчиво и понятно.
                                • +1
                                  Вместо fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_image
                                  можно сделать: # fakeroot make deb-pkg.
                                  • +1
                                    вместо нескольких команд:
                                    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_image
                                    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_headers
                                    и т.д.
                                    можно сделать одну
                                    # fakeroot make-kpkg --initrd --revision=og.091015.00 kernel_image kernel_headers kernel_manual kernel_doc

                                    • 0
                                      вы делаете make clean после конфигурации, удаляя сохраненный конфиг?
                                      • 0
                                        make-kpkg clean или make clean — называется, почувствуйте разницу ;)
                                        • 0
                                          Я пользую вот такой самопис.

                                          # расскоментировать, если пакетов нет
                                          #apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
                                          echo Installing $1
                                          cd /usr/src
                                          wget -c kernel.org/pub/linux/kernel/v2.6/linux-$1.tar.bz2
                                          tar xjf linux-$1.tar.bz2
                                          rm linux
                                          ln -s linux-$1 linux
                                          cd /usr/src/linux
                                          cp /boot/config-`uname -r` ./.config
                                          # make menuconfig
                                          # раскомментировать если понадобилось поменять конфигурацию
                                          make-kpkg clean
                                          fakeroot make-kpkg --initrd kernel_image kernel_headers
                                          dpkg -i linux*.deb
                                          rm -f *.deb

                                          На автомате, этот скрипт обновляет у меня ядро еще с 2.6.27, запускаю так
                                          ./kernel.sh 2.6.32.7
                                          Обновилось ли ядро, смотрю через RSS.

                                          PS Думал пост сделать со скриптом, всё в черновиках лежит.
                                          • 0
                                            Ну, он близок к коду статьи.
                                          • 0
                                            Вопросы автору статьи:
                                            1. Зачем опция --initrd. если initrd потом можно создать отдельно командой update-initramfs -c -k <версия установленого ядра>?
                                            2. Могу ли я пользоваться этой информацией для замены дебиановского ядра версии 3.2 ванильным версии 3.8? Как будет старая версия make-kpkg взаимодействовать с новым Makefile, если в новом Makefile появились такие опции как: nconfig, htmldocs, pdfdocs, mandocs? Опять же как будет новое ядро работать без дебиановских патчей?

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