Установка ядра linux-2.6.1 (вместо 2.4.x)

В статье подробно описывается один из способ сборки и установки нового ядра Linux на примере дистрибутива Slackware 9.1

[Анигина Галина Николаевна (gavianz@aport2000.ru)]

Установка ядра linux-2.6.1 (вместо 2.4.x)

(на примере Slackware 9.1, установленное ядро - 2.4.20)

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

(Вначале работаем как обычные пользователи и права администратора не нужны до тех пор - пока будем инсталировать ядро в /boot).

  1. Сделайте себе более полный вывод информации - где вы сейчас находитесь, кто вы и так далее следующим образом -
        bash-2.05b$ PS1="[\u@\h \w \t \s \# \! \$]\$"
        [пользователь@localhost.localdomain ~ 13:54:29 bash 3 503 $]$
    
    Согласитесь , что так гораздо комфортнее - больше информации.
  2. Для сохранности создаем где-то каталог /save и в него копируем два каталога: /boot и /lib.
  3. Переходим в каталог в котором мы хотим создать новый каталог (source), в котором мы будем собирать новое ядро
        cd /home/имя пользователя/
    
  4. Создаем новый каталог -
        mkdir /home/имя пользователя/source/
    
  5. Копируем сюда ядро а сжатом виде.
  6. Распаковываем ядро linux-2.6.0-test9.tar.bz2 :
        bzip2 -d linux-2.6.0-test9.tar.bz2. 
    
  7. Просматриваем наш каталог - появились ли там файлы:
        ls -All /home/имя пользователя/source/ - появились - прекрасно идем дальше.
    
  8. Разбираем один неразъемный файл на отдельные файлики:
        tar xf inux-2.6.0-test9.tar
    
  9. Просматриваем наш каталог - появились ли там файлы:
        ls -All /home/имя пользователя/source/ - появился каталог /linux-2.6.0-test9 - отлично.
    
  10. Заходим в этот новый каталог - cd /home/имя пользователя/source/linux-2.6.0-test9/.
  11. Читаем README, Changes и другие файлы объясняющие процедуру сдорки и настройки ядра.
  12. Сверяем что мы имеем в системе и что нам надо проапгрейдить по следующей таблице из файла "Changes" в комплекте ядра.
    o  Gnu C                  2.95.3                  # gcc --version
    o  Gnu make               3.78                    # make --version
    o  binutils               2.12                    # ld -v
    o  util-linux             2.10o                   # fdformat --version
    o  module-init-tools      0.9.10                  # depmod -V
    o  e2fsprogs              1.29                    # tune2fs
    o  jfsutils               1.1.3                   # fsck.jfs -V
    o  reiserfsprogs          3.6.3                   # reiserfsck -V 2>&1|grep reiserfsprogs
    o  xfsprogs               2.1.0                   # xfs_db -V
    o  pcmcia-cs              3.1.21                  # cardmgr -V
    o  quota-tools            3.09                    # quota -V
    o  PPP                    2.4.0                   # pppd --version
    o  isdn4k-utils           3.1pre1                 # isdnctrl 2>&1|grep version
    o  nfs-utils              1.0.5                   # showmount --version
    o  procps                 3.1.13                  # ps --version
    o  oprofile               0.5.3                   # oprofiled --version
    
  13. Обновляем что у нас не соответствует требуемому (это отдельная большая тема, особенно с module-init-tools).
  14. Ставим патчи на ядро , поднимая его номер при этом до 2.6.1 следующим образом:
  15. Копируем патчи в каталог /home/имя пользователя/source/ (при этом предполагается что вы находитесь в каталоге где лежат эти самые патчи, скаченные из интернета с сайта http://www.kernel.org):
        cp ./patch-2.6.0-test10.bz2 /home/имя пользователя/source/patch-2.6.0-test10.bz2
        cp ./patch-2.6.0-test11.bz2 /home/имя пользователя/source/patch-2.6.0-test11.bz2
        cp ./patch-2.6.1.bz2 /home/имя пользователя/source/patch-2.6.1.bz2
    
  16. Далее патчуем ядро этими патчами , для этого заходим в каталог с исходным ядром:
        cd /home/имя пользователя/source/linux-2.6.0-test9/.
    
  17. Делаем так:
        bzip2 -dc ../patch-2.6.0-test10.bz2 | patch -p1 
    
    Эта команда распакует архив .bz2 и пропатчует исходные коды ядра патчем, который находится в каталоге чуть выше нашего расположения - это две точки впереди.
  18. И аналогично далее:
        bzip2 -dc ../patch-2.6.0-test11.bz2 | patch -p1 и bzip2 -dc ../patch-2.6.1.bz2 | patch -p1.
    
  19. Отлично, теперь мы имеем исходные тексты ядра с уровнем 2.6.1.
  20. Делаем небольшую корректировку - любым редактором исправляем Makefile в исходном каталоге с ядром таким образом
    VERSION = 2
    PATCHLEVEL = 6
    SUBLEVEL = 1
    EXTRAVERSION = -my
    
    В результате этого Makefile поймет , что мы хотим собрать ядро с таким именем (ну положим в дальнейшем мы сами назовем ядро как хотим, но вот модули будут инсталироваться именно в этот каталог /lib/modules/2.6.1my, в чем мы в дальнейшем и убедимся).

    Кстати, если вы не знаете как найти этот файл Makefile, в который вам надо внести изменения, то сделайте поиск следующим образом:

        grep -R "EXTRAVERSION =" /home/имя пользователя/source/
    
    и эта программа выберет и покажет вам - в каком файле и в каком контексте встречается то, что вы задали ей найти.
  21. Переименовываем каталог из /home/имя пользователя/source/linux-2.6.0-test9/ в /home/имя пользователя/source/linux-2.6.1/
        cp -R /home/имя пользователя/source/linux-2.6.0-test9/ /home/имя пользователя/source/linux-2.6.1/ 
    
    Ключ -R нужен, чтобы каталог был переименован рекурсивно, то есть с подкаталогами.
  22. Для будущего сохраним их в архив - чтобы в дальшейшем более не проделывать эту процедуру еще раз:
        cd /home/имя пользователя/source/
        ls -All
        tar cfv linux-2.6.1.tar /home/имя пользователя/source/linux-2.6.1/
    	, где linux-2.6.1.tar - имя будущего архива.
        bzip2 -z linux-2.6.1.tar 
    	- и проверим командой ls -All появился ли у нас архив 
    	linux-2.6.1.tar.bz2 - да появился - значит все сделано привильно.
    
    Далее уберите этот архив куда-нибудь подалее на хранение.
  23. Создаем новый каталог -
        mkdir /home/имя пользователя/source/261/  
    
    для того , чтобы в дальнейшем в этом каталоге собрать новое ядро.
  24. Просматриваем наш каталог - появились ли там файлы:
    ls -All /home/имя пользователя/source/ - появился каталог /261.
    
  25. Это были все подготовительные работы а теперь пришло время заняться собственно сборкой и настройкой ядра. Переходм в каталог с исходными текстами уже нового ядра 2.6.1 (если вы находитесь сейчас в другом месте. Это можно проверить командой ls -all)
          cd /home/имя пользователя/source/linux-2.6.1/ 
    
    Перешли - отлично. Проверили, где мы сейчас находимся -
          ls -all.
    
  26. Начинаем сборку:
        make O=/home/имя пользователя/source/261/ menuconfig 
    
    фразой O=/home/имя пользователя/source/261/ мы задаем программе make путь вывода наших новых - измененных исходных текстов - сейчас разработчики ядра применили такую же технологию сохранения в неприкосновенности исходных текстов как чуть ранее поступили и разработчики gcc-3.2.2 - новое ядро строится не в том же каталоге где находятся исходные файлы, а в новой, вновь созданной директории- в нашем случае это /261).
  27. В графической оболочке ядра выбираем те компоненты, что нам нужны и выходим через кнопку exit из графической оболочки - при этом мы соглашаемся сохранить наше новую конфигурацию. Если в вашем каталоге нет файла .config (ф изначально это так - так как мы сами только что создали этот каталог, то перед тем как запустить эту строку можно туда скопировать ваш собственный .config от предыдущей сборки. Программа поймет что вы ей дали свой .config и будет работать уже с ним - толь добавятся новый возможности - и вам нужно будет их выбрать или отвергнуть.

    Если во вновь образованном каталоге нет файла .config то программа попытается сама определить и для этого протестирует вашу систему на предмет какое сейчас ядро вы используете и постарается сама модифицировать свой собственный .config под вашу систему.

    Если вы не сильно понимаете во всех этих возможностях нового ядра - сделайте проще но зануднее - сначала соберите ядро лишь бы онл загрузило систему, а далее сверите свой новый .config со срарым с помощью команды diff и внеся необходимые изменения в ваше ядро соберете его еще раз заново.

  28. Подводим итог - сейчас у нас появился .config в каталоге /261. Мы можем убедиться в этом командой
          ls -all /home/имя пользователя/source/261/ 
    
    где добавленная буква "a" покажет нам скрытые файлы - в данном случае наш новый .config.
  29. У одного файла там надо изменить права - дать право на чтение другим -
        chmod o+r /home/имя пользователя/source/linux-2.6.1/drivers/char/agp/isoch.c 
    
    - иначе далее при работе программы make будет выдана ошибка.
  30. Делаем далее так -
        make O=/home/имя пользователя/source/261/
    
    Это начнется сборка ядра полностью - соберется само ядро и модули к нему. Результат должен быть без ошибок.
  31. Начинаем инсталлировать новое ядро и модули в систему и делаем это указанным ниже способом (спасибо Зубкову С.В. и его книге "Linux - Русские версии" издательства ДМК г.Москва, 2000 год издания, откуда я почерпнула способ учитывать вновь установленные программы в своей системе, если их ставишь из .tar.gz, .tar.bz2, то есть из исходников).
  32. Теперь нам надо зайти в систему root'ом через su для установки ядра. - Зашли - прекрасно.
  33. touch 444 (создаем файл нулевой длины. В данном случае нас не интересует сам файл - нам нужен только "временной репер" - то есть временная зацепка - проще говоря нам нужно то обстоятельство что этот файл создан ДО начала инсталяции программы - ядра в данном случае) Обратите внимание - что с той минуты как вы создали временной репер 444 вы НЕ ДОЛЖНЫ ДЕЛАТЬ ничего другого кроме как того, что касается напрямую инсталяции ядра - иначе потом появится мусор в вашем файле конроля установленных программ.
  34. Несмотря на то, что когда заходишь в root через su в оболочке bash ты сразу оказываешься в том каталоге, где был до этого пользователь, для чистоты "сохранения истории команд root" мы переходим в каталог с исходными текстами:
        cd /home/имя пользователя/source/linux-2.6.1/
        ls -all - окей - мы там куда и хотели попасть.
    
  35. Сначала инсталлируем модули:
        make O=/home/имя пользователя/source/261/ modules_install 
    
    Начинается процесс установки модулей. В результате этого появится новый каталог /lib/modules/2.6.1my.
  36. Смотрим ls -all /lib/modules/2.6.1my - все отлично - инсталированы модули.
  37. Копируем ядро
        cp /home/имя пользователя/source/261/arch/i386/boot/bzImage /boot/vmlinuz-2.6.1my.
    
  38. Копируем файл с распределением нового ядра в памяти
        cp /home/имя пользователя/source/261/System.map /boot/System.map-2.6.1my.
    
  39. Любым простым редактором редактируем /etc/lilo.conf, чтобы в нем было следующее:
    image="/boot/vmlinuz-2.6.1my"
    	label="2.6.1my"
    	root="/dev/hda7"  #или другой раздел жесткого диска, где у вас 
    	read-only         #установлена СИСТЕМА, а не /boot!!!
    
    Далее сохраняем этот файл.
  40. Далее делаем очень важное - после внесения изменений мы вновь инициализируем программу lilo:
        lilo -v #ключ "v" нужен чтобы lilo проверила правильность внесенных нами изменений.
    
    Окей - все нормально.
  41. Создаем второй временной репер
        touch 555
    
  42. Объявляем поиск всех файлов, которые подверглись модификации или инсталяции за период между временем создания файла 444 и файла 555 (то есть перечень файлов, которые мы инсталировали в нашу систему в данное время - теперь вы понимаете - почему я не рекомендовала в это время делать что-то еще - например играться во что-нибудь?).
        find / -newer /home/имя пользователя/source/linux-2.6.1/444 ! -newer \
          /home/имя пользователя/source/linux-2.6.1/555 >>/var/log/packages/kernel-modules-2.6.1my.
    
    В результате этого программа find найдет все изменившиеся за это время файлы и перенаправит вывод этой информации не на экран, а в файл /var/log/packages/kernel-modules-2.6.1my. Что нам это дает? Мы узнаем какие файли и куда были установлены за период между временем создания двух файлов 444 и 555. (Хотя вы вправе их назвать и по-другому).
  43. Далее выходим из root и производим перезагрузку системы. Если вам повезет - то с первого раза ядро загрузит систему нормально и далее вы можете его настраивать, а если не - тоже не беда- так как у вас до этого было другое ядро и, надеюсь вы были благоразумны и не удалили его из /boot - грузимся с него.
  44. Далее через diff сверяем .config - что было и что стало, вносим изменения в новое ядро, компилируем, инсталлируем, фиксируем что установилось и перегружаемся. По всем имеющимся вопросам читаем документацию, которая поставляется в комплекте с ядром - там отлично описывается как и что.
Будем надеяться что у вас все получится отлично- у меня все получилось окей. Читайте man'ы по программам, которые вам не понятны. Например
    man grep
    man find
    man mknod
или info -
    info find
    info grep
и т.д.

Да, кстати: "А зачем все это нужно,"- скажут некоторые - "можно и без этого нового ядра прожить?" "Согласна",-скажу я в ответ - "можно и в простой хижине жить и питаться простой едой", однако этого что-то не наблюдается. Короче каждый самосовершенствуется по своему: можно посидеть, поболтать с приятелями, попить пивка - глядишь и время незаметно пройдет , ну и далее в том же ключе... Вообщем каждый отрывается, как может. В результате у меня маленькое быстрое ядро, которое еще не разу не упало (хотя некоторые и намекают разное - в статьях в интернете) и вообще - жизнь веселее - особенно с новым KDE, скачанной и установленной с CVS.

Возможно, в дальнейшем я напишу статью и на эту тему - очень интересно все время находишься на острие прогресса, а кроме того - преследовать сугубо утилитарную цель - ознакомление ядра с имеющимися мышкой USB и сканером USB HP3400C. Все нормально работает после настройки совместно ядра и системы (в частности пришлость подключить файловую систему devfs в ядре и настроить кое-какие конфигурационные файлы в системе. Кстати таким же образом у меня уже стоят на копьютере две системы - Slackware 9.1 и RedHat 7.3. При этом загрузка происходит по выбору ядра. При этом раздел /boot и swap у них общие, а сами системы размещены каждая на своем разделе - очень здорово - одну систему испорчу (сделаю что-то не так) зато другая имеется в которую можно зайти и работать в ней до тех пор пока другую не отреставрируешь. А между ними имеется промежуточный (перевалочный) раздел диска для обмена файлами и т.д.

В новом ядре добавлено много новых возможностей в части секретности:

    Enable different security models
    Socket and Networking Security Hooks
    Default Linux Capabilities
    Root Plug Support
и криптографического API:
    Cryptographic API
    HMAC support
    Null algorithms
    MD4 digest algorithm
    MD5 digest algorithm
    SHA1 digest algorithm
    SHA256 digest algorithm
    SHA384 and SHA512 digest algorithms
    DES and Triple DES EDE cipher algorithms
    Blowfish cipher algorithm
    Twofish cipher algorithm
    Serpent cipher algorithm
    AES cipher algorithms
    CAST5 (CAST-128) cipher algorithm
    CAST6 (CAST-256) cipher algorithm
    Deflate compression algorithm
    Testing module
и много чего другого добавлено.

Маленькое дополнение "по просьбам трудящихся" (для просветленных):

  1. Сохраняем где-то (на всякий случай) файл /etc/lilo.conf.
  2. Добавляем в оригинальный файл /etc/lilo.conf дополнительную загрузку вновь собранного ядра (см. п.39).
  3. В результате наш /etc/lilo.conf должен выглядеть следующим образом (примерно, так как в вашем случае будет иначе)
    boot="/dev/hda3"	# здесь мы обосновали "теплое местечко" - "дом" для раздела /
    boot
    			# а можно установить и в другое место /dev/hda1, /dev/hda2, /dev/hda4, 
    			# главное - до 1024 цилиндра (хотя говорят что последние лила и груб - grub 
    			# понимают и далее... - не пробовала - сильно много время это все занимает - 
    			# переустановка системы и ее настройка. Я имею в виду сложную установку - 
    			# с вывертами.
    prompt
    lba32
    bitmap=/boot/ins64a.bmp	# это грузится красивая желтая картинка с пингвином, которая пришла ко
    			# мне с новой lilo, которую я переустановила - очень необычное зрелище.
    vga=normal		
    timeout="150"		# задержка с загрузкой, чтобы пользователь мог выбрать разрые режимы 
    			# экрана (да - есть такая примочка, подключенная в одном из ядер, 
    			# жаль монитор слабоват, чтобы поддерживать все возможности выбора - 
    			# короче становится мелкий шрифт и много информации на экране за один присест)
    verbose=5		# выводить подробные комментарии при загрузке 
    large-memory		# уведомляем лилу, что имеем много памяти
    
    image="/boot/vmlinuz-2.4.18-3" # это грузится RedHat 7.3
    	label="2.4.18-3"
    	root="/dev/hda7"
    	read-only
    	initrd="/boot/initrd-2.4.18-3.img"
    
    image="/boot/bzImage-2.4.20"   # это грузится ядро от первоначальной
    	label="2.4.20"         # установки Slackware 9.0
    	root="/dev/hda10"
    	read-only
    
    image="/boot/vmlinuz-2.6.0-91" # это грузится пробное ядро 2.6.0-test9
    	label="2.6.0-91"
    	root="/dev/hda10"
    	read-only
    
    image="/boot/vmlinuz-2.6.0-92" # это грузится пробное ядро 2.6.0-test9- цельное - без модулей 
    	label="2.6.0-92cel"
    	root="/dev/hda10"
    	read-only
    
    image="/boot/vmlinuz-2.6.1-debug"  # это грузится ядро 2.6.1 с подключенным пунктом CONFIG_EXPERIMENTAL
    	label="2.6.1-debug"
    	root="/dev/hda10"
    	read-only
    
    image="/boot/vmlinuz-2.6.1-light"	# а это грузится максимально облегченное ядро 2.6.1 с отключенным
    	label="2.6.1-light"		# пунктом CONFIG_EXPERIMENTAL
    	root="/dev/hda10"
    	read-only
    
    Почитайте man lilo.
  4. Далее - см. выше по тексту.
  5. Примечание: несколько загрузок - это на всякий случай, если одно ядро не загрузит систему, то другое, не другое, так третье и так далее, то есть это механизм резервной загрузки, чтобы попасть наконец-то в свою систему.

    К вопросу староватости статейки - хотя можно сразу скачать новое ядро: уточняю следующие "принципиальные" моменты: Каждые полгода (приблизительно тащить по 30 мегабайт по dial-up.... Знаете как то жаба душит...

    В голове все время счетчик-таймер работает - сколько израсходовал время и сколько еще осталось. Я уже кстати давно заметила - некоторые товарищи, живя в первопрестольной (или в провинции, но сидящие на дармовом инете, в том числе и на работе - так как лично они денег не платят), совсем оторвались от "РЖ" (реальной жизни), где вообще-то все денег стоит. И поэтому эти "товарищи" могут спокойно в любое время "скачать" какие-то 30 мегабайт. А рядовые люди "вынуждены изголяться" со всякими патчами и прочими прибамбасами.

    В декабре 2003 года я скачала ядро 2.6.0-test9 и не сразу было время его поставить - так как род моей деятельности весьма далек от компьютеров, статей и ядер. А в январе 2004 года занялась этим. И что вы предлагаете еще тащить по dial-up 30 мегабайт нового ядра - 2.6.1?!

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

    Статья взята с сайта OpenNET.

    [ опубликовано 11/02/2004 ]

    Анигина Галина Николаевна (gavianz@aport2000.ru) - Установка ядра linux-2.6.1 (вместо 2.4.x)   Версия для печати