Одним из преимуществ Gentoo является возможность получить самые свежие версии всех пакетов и linux-ядра без полной переустановки системы. Ядро можно обновить до актуальной версии в любое время прямо из работающей системы. Для обновления ядра я использую genkernel, и состоит процесс из следующих шагов:
Обновляем портежи:
# emerge --sync
Смотрим, какая последняя версия ядра есть в репозитории:
# emerge -pv gentoo-sources
[ebuild NS ~] sys-kernel/gentoo-sources-3.6.6:3.6.6 [3.5.2:3.5.2] ...
NS обозначает, что есть обновление, и оно будет установлено в новый слот. В моем случае версия ядра в системе была 3.5.2, а версия последнего доступного ядра - 3.6.6.Ставим (или обновляем) пакеты, которые понадобятся в процессе:
# emerge -av genkernel eselect module-rebuild
Утилита eselect понадобится для переключения между версиями ядра, а module-rebuild для пересборки внешних модулей, которые не встроили в ядро.Заполним базу данных сведениями о текущих внешних модулях ядра:
# module-rebuild populate
Откроем файл /etc/genkernel.conf и выставим опции:
OLDCONFIG="no"
MENUCONFIG="yes"
CLEAN="yes"
MRPROPER="yes"
MOUNTBOOT="yes"
SAVE_CONFIG="yes"
USECOLOR="yes"
OLDCONFIG - до компиляции ядра запустится команда make oldconfig, которая попробует собрать информацию о системе, основываясь на /usr/share/genkernel/. Если активирован флаг --clean, то он превращается в --no-clean.
CLEAN - запускает make clean до начала процесса компиляции ядра, что удаляет все зависимости и объектные файлы из исходного (старого) ядра. При этом, если этот флаг имеет значение "NO", то не будет выполнена команда MRPROPER. Также не будет скопирован поверх конфигурационный файл, будет использован текущий.
MRPROPER - выполняет очистку, как и CLEAN, но ещё дополнительно удаляет все конфигурационные файлы (например, .config).
MENUCONFIG - запускает menuconfig, который помогает с помощью графического интерфейса настроить ядро.
MOUNTBOOT - монтирование загрузочного раздела, если он не подмонтирован (BOOTDIR). Обычно это /boot.
SAVE_CONFIG - в случае успешной компиляции ядра сохраняет конфигурационный файл в /etc/kernels.
USECOLOR - использовать цветной вывод информации в работе genkernel.
# emerge -av gentoo-sources
Теперь, чтобы не настраивать новое ядро с нуля, сделаем бэкап конфигурации текущего ядра:
# cp /usr/src/linux/.config /root/.config-3.5.2
Просмотрим список всех доступных в данный момент версий ядра:
# eselect kernel list
Available kernel symlink targets:
[1] linux-3.5.2-gentoo *
[2] linux-3.6.6-gentoo
Звездочкой помечена текущая версия ядра.Переключимся на новое ядро:
# eselect kernel set 2
Теперь можно приступить к сборке нового ядра. Запускаем genkernel:
# genkernel all
Откроется графический интферейс консольной программы, в котором необходимо найти пункт меню "Load an Alternate Configuration File" и, выбрав его, загрузить файл старой конфигурации, указав к нему путь (/root/.config-3.5.2). Благодаря этому загрузятся все настройки, которые были уже установлены для старого ядра. Просматриваем конфигурацию и делаем изменения в случае необходимости. Все новые опции, которых не было в загруженной конфигурации, отмечены ключевым словом "new".
Теперь сохраняем конфигурационный файл для того, чтобы genkernel использовал его. Для этого в меню выбираем пункт "Save an Alternate Configuration File" и сохраняем файл под именем .config, вследствие чего он сохранится в /usr/src/linux/.config.
Теперь, находясь в главном меню, два раза жмем esc и ждем, когда ядро скомпилируется.
# module-rebuild rebuild
Редактируем файл grub.conf, меняя в нем версию ядра на новую и переустанавливаем загрузчик:
# grub-install /dev/sda
Перезагружаемся:
# reboot
После перезагрузки удалим все, относящееся к старому ядру.
Удаление исходников:
# emerge -P gentoo-sources
Удаление временных файлов, которые остались после компиляции старого ядра:
# rm -rf /usr/src/linux-3.5.2-gentoo
Удаление файлов модулей, использовавшихся старым ядром:
# rm -rf /lib/modules/3.5.2-gentoo
Удаление файлов, относящихся к старому ядру, из /boot:
# rm /boot/initramfs-genkernel-x86-3.5.2-gentoo
# rm /boot/kernel-genkernel-x86-3.5.2-gentoo
# rm /boot/System.map-genkernel-x86-3.5.2-gentoo
Проверяем, что все прошло успешно:
# eselect kernel list
Available kernel symlink targets:
[1] linux-3.6.6-gentoo *
Обновление ядра завершено, система использует новое ядро.