Ставим ядро 2.6
Материал из Wiki.UnixForum.org
В этой статье рассмотрен механизм сборки ядра в комплексе - закачка, пример настройки, установка, правка конфигурационных файлов. Статья ориентирована на начинающих пользователей, разобраны опции ядра и дан пример настроки ядра для рабочей станции. Для сборки нужно чтобы у вас в системе был установлен компилятор gcc, библиотеки ncurses и ncurses - devel. У вас точно не будет проблем если вы ставили систему в режиме "Разработка"
Содержание |
[править] Качаем
Для начала нужно выкачать само ядро [точнее исходники] с сайта http://www.kernel.org/ Качайте архив tar.bz2 - он меньше по размеру. Имя файла должно быть примерно таким - linux-2.6.x.tar.bz2. Качайте всегда последнее стабильное ядро.
Если у вас уже есть ядро 2.6.0. , а вам нужно поставить например 2.6.2, то необязательно качать всё ядро, можно выкачать заплатки (их также называют еще "патчи", но давайте говорить на русском) и обновить исходники вашего ядра до последней версии. В таком случае вам нужно выкачать все заплатки по возрастанию номеров версии от вашей версии до последней. В данном примере это заплатки 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6 и 2.6.7. Файлы заплаток называются так. Файлы заплаток называются так - patch-2.6.7.bz2 . Их может не быть на главной странице , поищите их на ftp сервере ftp://ftp.kernel.org/.
Кроме самого ядра нам возможно понадобится выкачать дополнительные заплатки, расширяющие возможности ядра. К примеру, в ядре 2.6 нет поддержки lirc (пульты дистанционного управления). Чтобы эта поддержка была, на ядро нужно наложить соответствующую заплатку.
Для примера возьмем такие заплатки:
- bootsplash (графическая загрузка Линукса) с http://www.bootsplash.org/;
- win4lin (для одноименной программы эмуляции windows) http://www.netraverse.com/;
- lirc (поддержка устройств с ПДУ) - на официальном сайте заплаток нет но вы можете их найти с помощью> Гугла по имени файла.
- Supermount - возможность работы со сменными носителями без их подключения/отключения с http://sourceforge.net/project/supermount/
Качать лучше заплатку для той версии ядра которую вы хотите поставить, если их нет, то можно закачать для самой последней из имеющихся. В таком случае есть вероятность что заплатка не поставится. Причем вероятность этого тем больше, чем больше разница в версиях ядер. Предположим что мы ставим ядро 2.6.1 и получили такие файлы:
linux-2.6.6.tar.bz2
patch-2.6.7.bz2
bootsplash-3.1.4-2.6.7.diff
Kernel-Win4Lin3-2.6.7.patch и mki-adapter26_1_3_6.patch
lirc-2.6.5-20040404.patch
supermount-2.0.4-2.6.6.patch.gz
Хорошо. Теперь подготовим папку, где будем собирать ядро. В Линуксе для сборки из исходников есть специальный каталог /usr/src. Однако по умолчанию писать туда рядовому пользователю запрещено, поэтому сначала дадим себе права. Самый простой способ - запустить консоль, получить права root и командой chmod разрешить всем запись.
[user@localhost mike]$ su Password: [root@localhost root]# chmod a+w /usr/src [root@localhost root]#
Копируем исходники ядра (linux-2.6.0.tar.bz2) в папку /usr/src.
Теперь их надо распаковать. Если вы пользуетесь файловым менеджером mc, на файле нажмите F2, а потом "x". Если вы пользуетесь файловым менеджером gentoo, то щелкните правой кнопкой и выберите Действия - РаспаковатьСюда.
Получился каталог linux-2.6.0. Переименуйте его, например, в linux-2.6.1-my
Копируем все заплатки туда и переходим к следующему пункту.
[править] Ставим заплатки
Сначала распакуем упакованные заплатки. В mc для этого файла нажмите F2 а потом "y" (для .gz архива) или "b"(для .bz2 архива). В gentoo выделите все файлы нажмите правую кнопку Действия-Распаковать. Для чистой консоли можете использовать такие команды:
[user@localhost linux-2.6.7-my]$ gunzip *.gz [user@localhost linux-2.6.7-my]$ bzip2 -d *.bz2
Теперь собственно об установке заплаток. Сначала накладываем закладку для обновления версии ядра ( patch-2.6.1 ), потом остальные. В файловом менеджере Gentoo для установки можно просто щелкнуть правой кнопкой и выбрать Действия-Наложить. В консоли нужно дать следующую команду
patch -p1 -i <имя файла заплатки>
В нашем примере это будет выглядеть так
[user@localhost linux-2.6.7-my]$patch -p1 -i patch-2.6.7 patching file CREDITS patching file Documentation/Changes patching file Documentation/DocBook/kernel-locking.tmpl ...... patching file sound/sound_core.c patching file sound/usb/usbaudio.h patching file usr/gen_init_cpio.c [user@localhost linux-2.6.7-my]$ patch -p1 -ibootsplash-3.1.4-2.6.7.diff patching file drivers/char/keyboard.c Hunk #1 succeeded at 1052 (offset 7 lines). patching file drivers/char/n_tty.c patching file drivers/char/vt.c patching file drivers/video/Kconfig patching file drivers/video/Makefile patching file drivers/video/bootsplash/Kconfig patching file drivers/video/bootsplash/Makefile patching file drivers/video/bootsplash/bootsplash.c patching file drivers/video/bootsplash/bootsplash.h patching file drivers/video/bootsplash/decode-jpg.c patching file drivers/video/bootsplash/decode-jpg.h patching file drivers/video/bootsplash/render.c patching file drivers/video/console/fbcon.c patching file drivers/video/console/fbcon.h patching file drivers/video/vesafb.c patching file include/linux/console_struct.h patching file include/linux/fb.h patching file kernel/panic.c [user@localhost linux-2.6.7-my]$ patch -p1 -i Kernel-Win4Lin3-2.6.7.patch patching file kernel/exit.c Hunk #2 succeeded at 772 (offset 8 lines). patching file kernel/fork.c Hunk #1 succeeded at 896 (offset 34 lines). patching file kernel/sched.c Hunk #3 succeeded at 827 (offset 1 line). patching file mm/vmscan.c patching file arch/i386/Kconfig Hunk #1 succeeded at 1167 (offset 43 lines). patching file arch/i386/kernel/apm.c patching file arch/i386/kernel/cpu/common.c patching file arch/i386/kernel/entry.S patching file arch/i386/kernel/head.S patching file arch/i386/kernel/process.c patching file arch/i386/kernel/signal.c patching file arch/i386/kernel/vm86.c patching file arch/i386/Makefile patching file arch/i386/mki/Makefile patching file arch/i386/mki/mki.c patching file arch/i386/mm/fault.c patching file include/asm-i386/desc.h patching file include/asm-i386/mki.h patching file include/asm-i386/mkiversion.h patching file include/asm-i386/segment.h patching file include/asm-i386/thread_info.h patching file include/linux/init_task.h patching file include/linux/sched.h Hunk #1 succeeded at 463 (offset -1 lines). [user@localhost linux-2.6.7-my]$ patch -p1 -i mki-adapter26_1_3_6.patch patching file arch/i386/Makefile patching file arch/i386/mki-adapter26/LICENSE patching file arch/i386/mki-adapter26/Makefile patching file arch/i386/mki-adapter26/mki26.c patching file arch/i386/mki-adapter26/mki-adapter26.h patching file arch/i386/mki-adapter26/mkifunc.h patching file arch/i386/mki-adapter26/mki-main.c patching file arch/i386/mki-adapter26/mkivnet.c patching file arch/i386/mki-adapter26/README patching file arch/i386/mki-adapter26/timer.c patching file arch/i386/mki-adapter26/vneteth.h patching file arch/i386/mki-adapter26/vnetint-pub.h [user@localhost linux-2.6.7-my]$ patch -p1 -i lirc-2.6.5-20040404.patch patching file Documentation/lirc/lirc_it87 patching file drivers/char/Kconfig Hunk #1 succeeded at 591 with fuzz 2 (offset 1 line). patching file drivers/char/Makefile patching file drivers/char/lirc/Kconfig patching file drivers/char/lirc/Makefile patching file drivers/char/lirc/lirc_atiusb.c patching file drivers/char/lirc/lirc_bt829.c patching file drivers/char/lirc/lirc_dev.c patching file drivers/char/lirc/lirc_dev.h patching file drivers/char/lirc/lirc_gpio.c patching file drivers/char/lirc/lirc_i2c.c patching file drivers/char/lirc/lirc_it87.c patching file drivers/char/lirc/lirc_it87.h patching file drivers/char/lirc/lirc_parallel.c patching file drivers/char/lirc/lirc_parallel.h patching file drivers/char/lirc/lirc_serial.c patching file drivers/char/lirc/lirc_sir.c patching file include/linux/lirc.h [user@localhost linux-2.6.7-my]$ patch -p1 -i supermount-2.0.4-2.6.6.patch patching file Documentation/filesystems/00-INDEX patching file Documentation/filesystems/supermount.txt patching file drivers/cdrom/cdrom.c Hunk #3 succeeded at 874 (offset -12 lines). Hunk #4 succeeded at 892 (offset -12 lines). Hunk #5 succeeded at 975 (offset -12 lines). Hunk #6 succeeded at 989 (offset -12 lines). Hunk #7 succeeded at 1066 (offset -12 lines). Hunk #8 succeeded at 1338 (offset -12 lines). Hunk #9 succeeded at 2106 (offset -12 lines). Hunk #10 succeeded at 2907 (offset -12 lines). patching file drivers/cdrom/cdu31a.c Hunk #1 succeeded at 3173 (offset -1 lines). Hunk #2 succeeded at 3206 (offset -1 lines). Hunk #3 succeeded at 3220 (offset -1 lines). patching file drivers/cdrom/cm206.c patching file drivers/cdrom/mcd.c patching file drivers/cdrom/mcdx.c patching file drivers/cdrom/sbpcd.c patching file drivers/ide/ide-cd.c Hunk #1 succeeded at 3410 (offset -2 lines). Hunk #2 succeeded at 3462 (offset -2 lines). patching file drivers/ide/ide-floppy.c Hunk #4 succeeded at 1959 (offset 1 line). Hunk #5 succeeded at 2027 (offset 1 line). patching file drivers/scsi/sd.c Hunk #2 succeeded at 469 (offset 8 lines). Hunk #3 succeeded at 500 (offset 8 lines). Hunk #4 succeeded at 660 (offset 9 lines). Hunk #5 succeeded at 692 (offset 9 lines). Hunk #6 succeeded at 744 (offset 9 lines). patching file drivers/scsi/sr.c Hunk #1 succeeded at 477 (offset 9 lines). Hunk #2 succeeded at 527 (offset 9 lines). Hunk #3 succeeded at 543 (offset 9 lines). patching file fs/block_dev.c Hunk #1 succeeded at 512 (offset -2 lines). patching file fs/ext2/super.c patching file fs/isofs/inode.c patching file fs/Kconfig Hunk #1 succeeded at 946 (offset 34 lines). patching file fs/Makefile Hunk #1 succeeded at 91 (offset -1 lines). patching file fs/namespace.c Hunk #1 succeeded at 852 (offset 64 lines). patching file fs/super.c Hunk #2 succeeded at 530 (offset 16 lines). Hunk #3 succeeded at 659 (offset 16 lines). Hunk #4 succeeded at 774 (offset 16 lines). Hunk #5 succeeded at 829 (offset 16 lines). patching file fs/supermount/changelog patching file fs/supermount/dentry.c patching file fs/supermount/file.c patching file fs/supermount/filemap.c patching file fs/supermount/init.c patching file fs/supermount/Kconfig patching file fs/supermount/Makefile patching file fs/supermount/mediactl.c patching file fs/supermount/namei.c patching file fs/supermount/proc.c patching file fs/supermount/subfs.c patching file fs/supermount/super.c patching file fs/supermount/supermount.h patching file fs/udf/super.c patching file include/linux/cdrom.h Hunk #1 succeeded at 987 (offset 12 lines). patching file include/linux/fs.h Hunk #1 succeeded at 91 (offset -2 lines). Hunk #2 succeeded at 115 (offset -2 lines). Hunk #3 succeeded at 581 (offset 3 lines). Hunk #4 succeeded at 772 (offset 3 lines). Hunk #5 succeeded at 845 (offset 3 lines). patching file include/linux/genhd.h patching file include/linux/supermount_media.h
Обратите внимание на вывод команды patch
Если заплатка идеально подходит к ядру, то в выводе должны быть только строчки patching file ... . Если вы видите строчку Hunk #1 succeeded at... это означает что заплатка наложена успешно, но место наложения сдвинуто на некоторое кол-во строк. Если же вы увидите слово Failed - то значит заплатка не подходит, нужно искать более подходящую. В этом случае лучше удалить наш каталог /usr/src/linux-2.6.1-my и начать все сначала.
Итак, исходники ядра готовы и ждут когда их скомпилируют.
[править] Компилируем
[править] Подготовка
Для начала давайте посмотрим файл Makefile. Нас интересуют первые 4 строчки
VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 7 EXTRAVERSION = ...
Измените четвертую строку на
EXTRAVERSION = my
Это приведет к тому, что сделанное нами ядро будет называться linux-2.6.7-my. Если нам нужно будет несколько вариантов ядра 2.6.7, то можно снова изменить строчку EXTRAVERSION=my2, скомпилировать ядро еще раз и получить ядро linux-2.6.7-my2. ,что позволит при загрузке выбирать вариант ядра.
[править] Чистка
Запустите команду make mrproper
[user@localhost linux-2.6.1-my]$ make mrproper RM $(CLEAN_FILES) Making mrproper in the srctree RM $(MRPROPER_DIRS) + $(MRPROPER_FILES) [user@localhost linux-2.6.1-my]$
Эта команда нужна для удаления временных файлов, созданных при предыдущей сборке. Она удаляет также все настройки, которые вы сделали во время прошлой сборки. (Настройки лежат в файле .config, если есть желание перенесите куда-нибудь этот файл, выполните чистку, а потом верните обратно)
[править] Настройка ядра
А вот сейчас начинается самый ответственный момент, от которого зависит успех всего мероприятия. Здесь нужно знать хотя бы немного английский и знать начинку компьютера. Для начала немного теории.
Ядро может быть монолитным, а может быть модульным. Что это означает? Монолитное ядро - это просто один файл, который грузится при старте системы, и сидит в оперативке до выключения компьютера. Те возможности, которые заложены в этом файле, не подлежат изменению. Если включить все возможности в ядро, получаем очень большое и очень медленное ядро. Если сделать маленькое и быстрое ядро, то придется пожертвовать возможностями. Кроме того с таким ядром не смогут работать такие коммерческие программы как Win4Lin . На таком ядре не поставить драйвер видеокарты от фирмы Nvidia, что ставит крест на использовании этих ядер на домашних игровых компьютерах с этими видеокартами. В чем же преимущество монолитного ядра? Оно хорошо своей более высокой защищенностью и более простым использованием. При старте ядро обладает всеми возможностями, которые в него заложены. Ядро в этом случае располагается в каталоге /boot и имеет имя vmlinuz-xxxx.
Модульное ядро - это тоже же файл, который грузиться при загрузке с диске как и в случае с монолитным ядром, но плюс к есть нему набор файлов, которые называются модулями. Эти файлы по сути - возможности ядра, которые вы можете подключить к ядру и отключить от него без перезагрузки компьютера. Ядро которое у вас поставилось вместе с дистрибутивом - модульное. В модульном ядре все возможности, которые могут быть выведены в отдельный файл, т.е. модуль, - делаются модульными. Самый большой плюс модульного ядра - то что в него можно включить абсолютно все возможности, на что может ядро, все устройства, все файловые системы и т.п. Ядро в результате получается небольшим (в оперативной памяти) , быстрым и гибким. Минусы такого подхода - собственно в необходимости работы с модулями, вы не получите возможности модуля, пока его не загрузите. К счастью, большинство модулей грузиться автоматически, а остальные грузятся при старте системы загрузочными скриптами, избавляя вас от необходимости грузить вручную десятки модулей. В этом случае ядро представлено тем же файлом /boot/vmlinuz-xxxx и содержимым каталога /lib/modules/<версия ядра>. Кроме того модульному ядру нужен специальный образ загрузки т.н. initrd. Этот образ содержит все необходимые модули которые позволяют ядру загрузить ситему. Без этих модулей оно неспособно подключить системный раздел жесткого диска и прочитать файлы. Initrd файл располагается в каталоге /boot и имеет имя initrd-xxxx.
Где же истина? Как всегда, посередине. Какие-то возможности вы включаете в ядро, какие-то делаете модулями. Какие именно? Те возможности которые вам нужны постоянно - включаете, например драйвер жесткого диска, на котором лежит система. Если к вам приходит друг раз в месяц со своей usb фотокамерой - делайте драйвер usb и камеры модулями. Если сомневаетесь, нужна ли вам та или иная особенность - ставьте модулем. Посмотреть какие модули сейчас загружены в систему вы можете командой lsmod
Если ваш дистрибутив собран для 2.4 ядра (например АСПЛинукс 9.0), то у вас могут быть проблемы с загрузкой модулей, связанные с тем что в 2.6 изменились названия модулей. Поэтому я рекомендую включать все, что вам точно необходимо, в ядро.
Итак, настройка производится на выбор одной из четырех команд
- make xconfig
- make menuconfig
- make config
- make oldconfig
Первый вариант для пользователей, у которых есть графика - у вас запустится графическая программка для настройки, остальные - для консоли. Второй вариант предлагает текстовые меню для настройки. Третий задает 1000 и 1 вопрос. Четвертый нужен если у нас уже есть сформированный файл настроек .config (можно использовать файл настроек от старого ядра), при этом варианте задаются только те вопросы которые появились в этой версии ядра. Первый вариант нам наиболее симпатичен. Итак вперед!
3.4 Пример настройки ядра.
Итак вперед!
Если Вы хотите возможность оформить модулем, ставьте точку (m для консоли), Если включить в ядро, - галочку (* или y)
Для тех кто не знает английский, привожу примерную настройку рабочей станции. Естественно, оговорюсь, что я не считаю свой подход единственно правильным, не претендую на 100% понимание всего что есть в ядре, - как я это понимаю, так и привожу в этом документе
Итак, настройка завершена, сохраните настройки и выходите из программы настройки. Все настройки сохраняются в файле .config (скрытый). В будущем, если вы будете переходить на следующую версия ядра, вы может после установки заплаток скопировать этот файл в каталог с исходниками ядра и выполнить в консоли команду make oldconfig. В этом случае вам не придется отвечать на все эти вопросы, вам будут заданы вопросы только по новым возможностям.
[править] Сборка и установка
Теперь осталось собрать ядро. Процесс сборки и установки ядра можно выполнить одной командой (от пользователя root)
make bzImage modules modules_install install
а можно разбить на несколько этапов
от простого пользователя:
make bzImage
(собрать ядро)
make modules
(собрать модули)
от пользователя root:
make modules_install
(установить модули)
make install
(установить ядро)
Первый вариант хорош тем, что вы может задать сразу все команды и отвлечься от компьютера. Второй вариант более правильный идеалогически. Процесс сборки занимает большую часть времени. Поэтому я обычно делаю так:
от простого пользователя:
make bzImage modules
от root:
make modules_install install
Или же от простого пользователя:
make su make modules_install install
Команду make bzImage modules теперь можно заменить командой make
Процесс в зависимости от мощности процессора и кол-ва выбранных модулей может занимать много времени, вы успеете испить чашечку кофе или принять ванну.
Если вы слишком увлекаетесь заплатками, то ядро может и не собраться (на определенном этапе сборка прервется и вы увидите код ошибки). В этом случае вам придется либо отключать модули на которых происходит ошибка, либо повторять все сначала уже с меньшим кол-вом заплаток. Если у вас ядро без заплаток не желает компилироваться, то это говорит о неправильной установке дистрибутива, либо нехватки компилятора или библиотек. Попробуйте установить дистрибутив в режиме "Разработка" (не забудьте добавить КДЕ и другие пользовательские программы). Дистрибутивы ALT Linux Junior и ASPLinux ChipEdition - на самом деле не дистрибутивы, а, говоря интеллигентно, демо-версии, поэтому не удивляйтесь, если у вас ничего не выйдет.
В Debian ядро лучше собирать командой
make-kpkg --initrd kernel_image
Так оно сразу упакуеться в deb-пакет, который будет просто заинсталировать. Но для этого нужны пакеты libncurses5, make-kpkg и mkinitrd.
Когда ядро будет собрано, у вас должны появиться следующие файлы:
/boot/vmlinuz-2.6.7-my
/boot/System.map-2.6.7-my
/boot/initrd-2.6.7.img
и каталог модулей
/lib/modules/2.6.7-my
Ядро установлено, теперь надо настроить загрузчик.
[править] Настройка загрузчика
После установки ядра, как правило, автоматически настраивается и загрузчик, если этого не произошло или Вы хотите подправить что-либо, то читайте дальше.
Три самых распространенных загрузчика: LILO, GRUB, ASPLoader.
LILO - это самый старый (но это не значит самый обделенный возможностями). Отличается хорошей надежностью и большими возможностями.
GRUB - самый мощный по возможностям загрузчик. Очень хорош, можно поставить картинку из 14 цветной палитры.
У ASPLoader есть две оригинальные особенности - поддержка мыши и простота. Однако дизайн у него уж больно смахивает на маздаевский. Да и по возможностям слабоват.
!!! Никогда не удаляйте настройки старого ядра, это может привести к невозможности загрузки системы обычным образом, если сделанное вами ядро не работоспособно !!!
[править] Настройка LILO
1. Для начала подправьте файл настроек
Он расположен в файле /etc/lilo.conf
image=/boot/vmlinuz-2.6.7-my label="Linux-2.6.7-my" root=/dev/hda5 initrd=/boot/initrd-empty.splash append="noapic devfs=mount splash=silent" vga=0x317 read-only
Если Вы не используете initrd (все драйверы необходимые для загрузки системы включены в ядро и bootsplash не используется), тогда соответствующую строчку можно удалить.
2. Дайте команду lilo под польззователем root для записи изменений в загрузчик
Для дополнительной информации смотрите man lilo.conf
[править] Настройка GRUB
1. Подправьте файл настроек /boot/grub/menu.lst
title linux-2.6.7-my kernel /vmlinuz-2.6.7-my root=/dev/hda5 ro vga=791 splash=silent initrd /initrd-empty.splash boot
Если Вы не используете initrd (все драйверы необходимые для загрузки системы включены в ядро и bootsplash не используется), тогда соответствующую строчку можно удалить. Ранних GRUB 0.96 файл настроек назывался grub.conf
2. После установки ядра grub в MBR будет затерт ASPLoader'ом. Вам надо будет заново установить grub. Под пользователем root введите в консоли
grub grub> root (hd0,0) (/boot раздел расположен на первом разделе первого жесткого диска) Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0) (записать загрузчик в MBR первого жесткого диска) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded... succeeded Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done. grub> quit
Подробнее о настройках grub смотрите info grub
[править] Настройка ASPLoader
1. Сначала правим файл настроек
Он расположен в файле /etc/aspldr.conf
[linux1062672691@Linux(2.6.7-my)] icon linux kernel /boot/vmlinuz-2.6.7-my root=/dev/hda5 ro vga=791 splash=silent initrd /boot/initrd-2.6.7-my.img [SEPARATOR] [asplinux1@ASPLinux(2.4.20-9asp)] icon linux kernel /boot/vmlinuz-2.4.20-9asp root=/dev/hda5 ro initrd /boot/initrd.2.4.20-9asp.img
Если Вы не используете initrd (все драйверы необходимые для загрузки системы включены в ядро и bootsplash не используется), тогда соответствующую строчку можно удалить.
2. Дайте команду aspldr для записи изменений в загрузчик
Для дополнительной информации смотрите man aspldr.conf
[править] Отключение автоматической настройки загрузчика при установке ядра
Часто бывает неудобным, когда при установке ваш загрузчик автоматически меняется. Например, Вы выбрали grub, а Вам ставиться загрузчик, который система считает стандартным. Чтобы каждый раз не переустанавливать загрузчик, возможно вмешаться в этот процесс. Проверьте, существует ли у Вас файл /etc/sysconfig/installkernel Если да, то это не составит труда. Если нет, то для Вас единственный способ - это правка скрипта /sbin/installkernel Вот пример моего файла для MandrakeLinux 10.
# Пример файла настроек/etc/sysconfig/installkernel для /sbin/installkernel NOLAUNCH="YES" # Если поставить "yes", тогда команда lilo запускаться не будет NOCOPY="" # Если поставить "yes", тогда файлы не будут копироваться NOLINK="yes" # Если поставить "yes", тогда не будет создаваться ссылка vmlinuz на новое ядро AUTODETECT="no" # Для автоопределения используемого загрузчика LOADER="GRUB" # Загрузчик (только GRUB или LILO поддерживаются) NOCONFIG="yes" # Если не хотите чтобы Ваш файл настроек .config копировался в /boot NOENTRY="yes" # Если не хотите чтобы добавлялась строчка в файл настроек загрузчика OPTIONS="" # Параметры командной строки для ядра,которые надо добавить AUTOREMOVE="yes" # Удалять записи в случае удаления ядра (те что в виде rpm) # Модули которые долны добавляться в initrd. Порядок важен. INITRDOPTS="" # Например INITRDOPTS="--with=reiserfs"
[править] Установка bootsplash в initrd
Bootsplash размещает свою картинку в файле initrd. Этот файл нельзя взять со стандартного ядра т.к. там еще расположены драйверы, которые на нашей версии ядра работать не будут. Поэтому нам нужно сделать новый. Лучший вариант, когда все драйверы необходимые для загрузки операционной системы вкомпилированы в ядро, в этом случае нам initrd нужен только для bootsplash. Файл /boot/initrd-2.6.7-my.img, который был создан автоматически командой make install, можно смело удалять. Вместо него есть смысл создать пустой файл и прописать туда bootsplash. Полученный файл подойдет для любых ядер, в которых все драйверы, необходимые для старта системы, включены в ядро! Ниже рассмотрим как это сделать для дистрибутивов ASPLinux 9 и MandrakeLinux 10.
[править] ASPLinux 9
В самом дистрибутиве Вы не найдете bootsplash, он не входит в дистрибутив скорее по непонятным идеалогическим соображениям. Однако Вы можете скачать этот пакет с сайта Алхимии. Некоторые пользователи считают эту реализацию bootsplash лучшей среди дистрибутивов. Установка и настройка осуществляется мастером bootsplashconf. Вам нужно запустить этот мастер и ответить на несколько простых вопросов. Предупреждение: мастер может отображаться несколько некрасиво если установлена локаль по умолчанию UTF. Это связано с ошибками в реализации ncurses в этом дистрибутиве.
[править] MandrakeLinux 10
В этом дистрибутиве есть свой мастер для настройки bootsplash, который можно запустить через стандартный drakconf. Однако есть смысл рассказать об альтернативном варианте - через консоль, т.к это просто и может пригодится. Если Вы хотите использовать новую тему, то сначала установите ее в файле /etc/sysconfig/bootsplash (например THEME=Linux). Затем дайте команду
/usr/share/bootsplash/scripts/make-boot-splash /boot/initrd-bootsplash.img 1024x768
Будет создан файл /boot/initrd-bootsplash.img который подойдет для всех наших ядер.
[править] Доводка Вашего дистрибутив
Если Вы используете дистрибутив, который основан на ядре 2.6, у Вас не должно быть проблем, однако если Ваш дистрибутив основан на 2.4, то Вы можете столкнуться с проблемами, связанными с тем что работа с модулями поменялась в ветке 2.6. Давайте разберемся.
[править] Работа с модулями
Первое, нужны новые утилиты для работы с модулями - modutils. Они нужны для загрузки модулей. Вы их можете найти с помощью ресурса http://www.rpmfind.net. Качайте последнюю версию для своего дистрибутива или родственного дистрибутива (RedHat, Mandrake).
Для установки пакетов нужно под пользователем root ввести команду
rpm -Uhv <имя файла rpm>
Второе, загрузочные скрипты ошибочно отключают автозагрузку модулей.
Для этого в файле /etc/rc.d/rc.sysinit найдите следующие строки
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then USEMODULES=y fi
и переделайте их к виду
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null ; then USEMODULES=y fi
Кроме этого, возможны проблемы с подключением модулей, которые имеют разные названия в версиях ядра 2.4 и 2.6. В этой ситуации помогает включение этих модулей в ядро.
Если у Вас возникнут проблемы, Вы можете восстановить оригинальные пакеты, загрузившись с LiveCD, который понимает команду rpm (например Knoppix)
[править] Подключение файловой системы /sys
Sysfs - новая фаловая система, похожая по назначению на /proc и нужна чтобы программы могли через нее работать с оборудованием и модулями. Пока что программ использующих ее не так уж много, однако лучше все-таки ее подключить. Проверить включена ли она у Вас сейчас можно командой mount без параметров.
Для включения этой файловой системы сначала создайте каталог /sys.
Если Вы не будете использовать ядра 2.4, то можно просто в файл /etc/fstab добавить такую строку
none /sys sysfs defaults 0 0
Не забудьте, что в последняя строка этого файл должна быть пустой! Если Вам нужно грузить иногда и ядро 2.4, то лучше поступить по-другому. Указанный ранее вариант плох в этом случае тем, что загрузочные скрипты не смогут подключить эту ФС в ветке 2.4 и выдадут сообщение об ошибке. Добавьте в конец файла /etc/rc.d/rc.local следующую строку
mount -t sysfs sysfs /sys >/dev/null 2>/dev/null
На этом все. Добро пожаловать в Линукс 2.6!
[править] Приложения
[править] Установка драйверов Nvidia
В этом разделе Вы сможете узнать подробнее об установке драйверов для видеокарт Nvidia (Для карт семейства TNT GeForce). Для этого нам нужно закачать драйвер видеокарты с официального сайта NVidia. Получаем файл вида NVIDIA-Linux-x86-1.0-6106-pkg1.run
Драйвер придется ставить без графики, в консоли. Для этого придеться загрузиться в однопользовательском режиме. Для загрузки в консоли передайте ядру параметр S (В ASPLoader для этого полазайте по меню и найдите соответствующую команду. В GRUB для редактирования используйте кнопку E, для загрузки c отредактированной строки B. Для LILO нажмите Esc, наберите метку Вашего ядра (одну из предложенных) и добавьте через пробел слово single или S )
Во время загрузки с Вас затребуют пароль пользователя root. Вводите. Попадете в консоль. В консоли запустите команду mc - это облегчит работу
Переходите в каталог, где лежит драйвер и запускайте его командой bash NVIDIA-Linux-x86-1.0-6106-pkg1.run или можно просто нажать на нем Enter, если Вы установите на нем права доступа 755.
Запустится установщик, согласитесь с лицензией. Установщик найдет уже установленный драйвер и предложит его удалить. Согласитесь. Потом установщик предложит поискать готовый драйвер в интернете. Откажитесь, все равно не найдет. Предложит сделать. Соглашайтесь. Драйвер должен установиться.
Проверить это можно так. Загрузите модуль командой modprobe nvidia. Проверьте факт загрузки командой lsmod. Если в выводе lsmod Вы увидите строчку nvidia, - то все нормально. Обычно установщик сам ставит модуль в автозагрузку. Он добавляет в файл /etc/modules.conf строчку
alias char-major-195 nvidia
Если у Вас это по разным причинам не срабатывает, Вы можете добавить в файл /etc/rc.d/rc.local.local строчку
modprobe nvidia
Выходите из mc. Нажмите Ctrl-D для продолжения загрузки.
Если все пошло не так.
Если у Вас удалились старые и не установились новые драйверы, то можно загрузить графику так - в файле /etc/X11/XF86Config (а в современных дистрибутивах /etc/X11/xorg.conf) ищите (с помощью mc) строчку
Driver "nvidia"
и заменяете ее на
Driver "nv"
или
Driver "vesa"
Этим Вы сможете загрузить графику, но не сможете с таким драйвером играть в игры. Чтобы вернуть все как было до наших экспериментов, найдите на установочных дисках пакеты
nvidia-kernel-*.rpm
в зависимости от того ядра, которое у Вас установлено. Пакеты ставьте командой
rpm -Uhv -force <имя пакета>
или в файловом менеджере Gentoo выделите пакеты, нажмите правой кнопкой- Действия-Обновление
Не забудьте исправить файл /etc/X11/XF86Config или /etc/X11/xorg.conf в зависимости от дистрибутива.
Ищите решение проблем на форумах.
[править] Установка драйверов для нескольких ядер
Здесь рассмотрим ситуацию когда нам нужно установить драйверы для разных ядер. Обычно при запуске установщика драйверы удаляются и ставятся только для текущего ядра. Вместе с этим происходит обновление библиотек OpenGL. Эти библиотеки жестко связаны с версией драйверов, поэтому Ваши драйверы для старого ядра не смогут работать, если их номер версии отличен. Нам нужно будет установить драйверы для всех ядер, которые мы используем. Для этого нам понадобятся исходники ядра для всех этих ядер(!). Ссылка/lib/modules/версия_ядра/build должна соответствовать каталогу с исходниками. В этом каталоге должны быть выполнены команда make bzImage modules
Перед тем как это сделать, положите NVIDIA-Linux-x86-1.0-6106-pkg1.run в каталог /usr/src и распакуйте его
[user@localhost src]$ sh NVIDIA-Linux-x86-1.0-6106-pkg1.run -x Creating directory NVIDIA-Linux-x86-1.0-6106-pkg1 Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86 1.0-6106.......................................................................................................... .................................................................................................................. [user@localhost src]$
Получится каталог NVIDIA-Linux-x86-1.0-6106-pkg1, в котором будут лежать исходники модуля и библиотеки GLX. Теперь нам остается только грузить наши остальные ядра в однопользовательском режиме и запускать команду для сборки и установки драйвера.
[root@localhost root]# cd /usr/src/NVIDIA-Linux-x86-1.0-6106-pkg1/usr/src/nv [root@localhost nv]# make clean [root@localhost nv]# make install
[править] Проблемы с iptables
После сборки своего ядра Вы можете столкнуться с тем, что некоторые модули iptables, которые успешно загружаются на стандартном ядре, не работают на самосборном. Не стоит сразу винить себя в ошибках. Дело в том, что и ядро и iptables в дистрибутивах, как правило, отличается от той версии, что предлагается для скачивания на странице разработчиков. Все разработчики дистрибутивов стремятся сделать свой дистрибутив богаче возможностями, поэтому на iptables и ядро накладываются заплатки, с одной стороны расширяющие возможности, а с другой стороны, ломающие совместимость со стандартными пакетами.
Ниже будет рассмотрен пример выхода из этой ситуации в двух дистрибутивах: MandrakeLinux 10 и ASPLinux 9
[править] Iptables в MandrakeLinux 10
Начнем именно с этого дистрибутива, т.к. применяемый здесь метод может служить примером для других дистрибутивов.
Дело в том, что дистрибутив уже готов к тому что Вы будете работать со своим ядром! В каталога /lib Вы можете обнаружить два подкаталога iptables-mandrake и iptables-vanilla. Это модули iptables для дистрибутивного и стандартного ядер соответственно. Кроме этого, Вы увидите ссылку iptables которая указывает на один из этих вариантов. Какой именно вариант нужен именно при этой загрузке, - определяется автоматически при старте iptables. Вот кусочек скрипта /etc/rc.d/init.d/iptables
check() {
if [ -n "$1" ]; then
rm -f /lib/iptables
ln -s /lib/iptables-${1} /lib/iptables
iftable nat -N __IPTCHECK__${1}__ >/dev/null 2>&1
iftable nat -A __IPTCHECK__${1}__ -j MASQUERADE >/dev/null 2>&1
res=$?
iftable nat -F __IPTCHECK__${1}__ >/dev/null 2>&1
iftable nat -X __IPTCHECK__${1}__ >/dev/null 2>&1
return $res
else
/sbin/modprobe ipt_MASQUERADE >/dev/null 2>&1
check mandrake || check vanilla
/sbin/modprobe -r ipt_MASQUERADE >/dev/null 2>&1
fi
}
Обратите внимание, чтобы проверка успешно срабатывала необходимо в Вашем ядре сделать поддержку маскарада. Если Вам это не нужно, Вы можете изменить этот скрипт в соответствии с Вашими требованиями. Только не забудьте перед этим сделать архивную копию скрипта.
[править] Iptables в ASPLinux 9
Пользователям ASPLinux придется либо пересобирать iptables под свое ядро либо искать готовый. Для пересборки Вам нужно будет скачать с сервера Вашего дистрибьютора пакет iptables-xxx-asp.src.rpm. Установить его командой
rpm -ihv <имя пакета>
и пересобрать командой
rpmbuild -bb /usr/src/aslinux/SPECS/iptables.spec
Возможно этот spec файл Вам придется откорректировать, закоментировав строки
patch -p1 ...
Ищите собраный пакет в каталоге /usr/src/asplinux/SPECS/RPMS/i386 . Если для Вас это кажется сложным, то можете скачать готовый пакет для Fedora Core или отсюда http://linux.alhimia.ru/pub/linux/kernel/kernel-2.6/2.6.4-deps/iptables/iptables-1.2.9-1.2.i386.rpm
Если Вам необходимо грузить и стандартное и свое ядра на одной машине, Вам придется реализовать механизм, используемый в MandrakeLinux. Стандартный каталог /lib/iptables переименуйте в /lib/iptables-asp. После установки "обычного" iptables, переименуйте каталог /lib/iptables в /lib/iptables-generic Файл /etc/rc.d/init.d/iptables изменить примерно так
start() {
rm -f /lib/iptables
uname -r | grep -qi asp && ln -sf /lib/iptables-asp /lib/iptables
[-d /lib/iptables ]|| ln -sf /lib/iptables-generic /lib/iptables
# don't do squat if we don't have the config file
[править] От атора
Успехов!
11.07.2004 г. Автор - Зарипов Михаил. Если Вы нашли орфографические / идеологические или другие ошибки - напишите автору.
Copyright (C) 2004 linux.alhimia.ru
[править] Благодарности
Благодарю всех, кто оказал мне поддержку, помог в исправлении ошибок:
Михаила
isn (Форум сообщества ASPLinux)
rmn (Форум сообщества ASPLinux)
Лешего
Klimchyk Uladzimir.
