# Обновление ядра. Как это делается в Gentoo?

## EsTaF

Нет. Конечно я могу просто взять и удалить всю папку с исходниками, скачать с kernel.org свежак и поставить его.

Но, обычно это делается, как я пониаю, так:

emerge sync

emerge depclean

emerge -fuD world

emerge -uD world

env-update

source /etc/profile

etc-update

и вот, что я вижу:

ls -l /usr/src/

итого 2

lrwxrwxrwx  1 root root   23 Июл 13 04:31 linux -> linux-2.6.16-gentoo-r12

drwxr-xr-x 20 root root 1424 Июл 21 16:48 linux-2.6.16-gentoo-r12

drwxr-xr-x 19 root root  744 Июл 22 11:52 linux-2.6.16-gentoo-r13

du -h /usr/src/linux-2.6.16-gentoo-r12/

...

350M    /usr/src/linux-2.6.16-gentoo-r12/

du -h /usr/src/linux-2.6.16-gentoo-r13/

...

254M    /usr/src/linux-2.6.16-gentoo-r13/

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

Все бы ничего, но вспомнил доку, где говорится, как ставить ядро при установке самой ОС:

USE="-doc symlink" emerge gentoo-sources

ака забить на доки ядра и добить такую вестсчь, как sumlink. видимо, что бы произошла линковка папки с версией на нативное имя "linux". то бишь, последнее - не есть пакет.

хозяйство можно закинуть в pakckage.use. что бы при следующих ворлдах, все было именно так...

вопрос:

Есть ли какие либо ньюансы? Все так же прозрачно, как и с другим софтом?

И еще. откуда у emerge хватило ума оставить "r12"? Нет. оно верно, но откуда?

Правильно ли будет после компиляции нового ядра просто удалить старое?

ибо

если я просто пересоберу уже новое ядро, то стоит ли делать заново обновление.

от ядра могут зависеть некоторые вещи, такие как дрова видюхи и что-либо еще, чего я могу и не знать.

Описывается ли где-либо механизм такого перехода? Правило перехода. Руководство по переходу.

конфиг ядра меня не интересует.

----------

## fedukoff

Если ты пользуешься USE="symlink", необходимо после обновления портейджа обновить-откомпилить ядро, а затем уже обновлять остальной world.

В symlink никакого волшебства нету. Просто после того, как распакуются исходники ядра в /usr/src, автоматом создается-изменяется тот самый /usr/src/linux, чтобы указывал на свеже поставленное. Следовательно в нем нету .config, что может быть фатальным для пакетов включающих в себя дополнительные модули ядра, например alsa, драйвера ati, nvidia и пр.

По этому и надо бы сразу закомпилить новое ядро, а за тем уже все остальное.

Еще полезно будет вот это

----------

## Balancer

```

# eselect kernel list

Available kernel symlink targets:

  [1]   linux-2.6.15-gentoo-r7

  [2]   linux-2.6.16-gentoo-r1

  [3]   linux-2.6.16-gentoo-r2

  [4]   linux-2.6.16-gentoo-r3

  [5]   linux-2.6.16-gentoo-r4

  [6]   linux-2.6.16-gentoo-r6

  [7]   linux-2.6.16-gentoo-r8

  [8]   linux-2.6.17-gentoo-r2

  [9]   linux-2.6.17-gentoo-r3

  [10]  linux-2.6.17-gentoo-r4

# eselect kernel set linux-2.6.17-gentoo-r4

... тут переносим старый конфиг ручками

# genkernel --menuconfig all

```

----------

## Azik

Если ядро собиралось genkernel, то все конфиги после успешной компиляции собираются в /etc/kernels/, а сам genkernel может принимать параметр --kernel-config=<где этот конфиг>.

Так что после перенаправления симлинка можно просто

```
genkernel --kernel-config=/etc/kernels/<...> --menuconfig all
```

Все зависящие от ядра вещи (драйвера, независимые модули, fuse)

придется пересобирать вручную, причем нужно быть увереным, что симлинк /usr/src/kernel указывает на нужные исходники. Porage никак за этим делом не следит, поэтому за обновление оных пакетов ложится полностью на пользователя. Чаще всего нужно просто пересобрать соответсвующие пакеты.

----------

## Balancer

 *Azik wrote:*   

> Если ядро собиралось genkernel, то все конфиги после успешной компиляции собираются в /etc/kernels/

 

Самое забавное, что у меня на трёх машинах, в двух случаях конфиги в /etc/ лежат, а в одном - нет. Настройки и версии, вроде, одинаковые  :Smile: 

----------

## Laitr Keiows

 *Azik wrote:*   

> Porage никак за этим делом не следит, поэтому за обновление оных пакетов ложится полностью на пользователя. Чаще всего нужно просто пересобрать соответсвующие пакеты.

 

на то есть sys-kernel/module-rebuild

----------

## KUV

Я использую vanilla-sources, обновляюсь обычно следующим образом:

```
emerge -u vanilla-sources # распаковываю сорцы

eselect kernel set 2 # меняю симлинк

cd /usr/src/linux && cp ../linux-***/.config . # копирую старый конфиг

make menuconfig # корректирую опции, если надо

make bzImage modules modules_install && modules-update # компилирую

equery d virtual/linux-sources # смотрю какие пакеты используют сорцы ядра, пересобираю их

mount /boot && /usr/src/cpboot.sh && nano /boot/grub/grub.conf && umount /boot # cpboot.sh это мой скрипт, который копирует нужные файлы и переименует их

reboot

emerge -C "=linux-***" && rm -r /usr/src/linux-*** # если все удачно, удаляю старое ядро
```

----------

## Laitr Keiows

 *KUV wrote:*   

> Я использую vanilla-sources, обновляюсь обычно следующим образом:

 

Что-то много. Я делаю так:

```
zcat /proc/config.gz > .config && make oldconfig && mount /boot && make all modules_install install
```

И все! Новое ядро автоматически копируется в /boot, старое там же переименовывается.

Вот только зачем все копирование делать вручную? Может быть в этом есть какой-то сакральный смысл?..

В моем случае grub.conf нужно редактировать всего один первый раз, в /boot лежат вот такие симлинки:

```
lrwxrwxrwx 1 root root      24 Июл 12 14:34 config -> config-2.6.16-gentoo-r12

lrwxrwxrwx 1 root root      23 Июн 19 21:20 config.old -> config-2.6.16-gentoo-r5

drwxr-xr-x 2 root root     632 Апр 26 20:31 grub

lrwxrwxrwx 1 root root      28 Июл 12 14:34 System.map -> System.map-2.6.16-gentoo-r12

lrwxrwxrwx 1 root root      27 Июн 19 21:20 System.map.old -> System.map-2.6.16-gentoo-r5

lrwxrwxrwx 1 root root      25 Июл 12 14:34 vmlinuz -> vmlinuz-2.6.16-gentoo-r12

lrwxrwxrwx 1 root root      24 Июн 19 21:20 vmlinuz.old -> vmlinuz-2.6.16-gentoo-r5

```

сами файлы из листинга я для кратости убрал

Достаточно один раз прописать vmlinuz и vmlinuz.old и все!

----------

