Сборка ядра / make kernel — различия между версиями

Материал из OpenWiki
Перейти к: навигация, поиск
(Хочу представить очень простой способ установки ядра linux:)
 
(не показано 14 промежуточных версии 2 участников)
Строка 1: Строка 1:
  
== Хочу представить очень простой спосов установки ядра linux: ==
+
== Хочу представить очень простой способ установки ядра linux: ==
  
 
'''ОТСТОРОЖНО:'''
 
'''ОТСТОРОЖНО:'''
Строка 7: Строка 7:
 
  /lib/modules/<версия ядра> - около 2 GB
 
  /lib/modules/<версия ядра> - около 2 GB
  
новое ядро может понадобится для повышения функциональности или исправления ошибок
+
Новое ядро может понадобится для повышения функциональности или исправления ошибок (к примеру, я избавился от ошибки с xl2tpd - Failed to open /dev/pts/1: No such file or directory), НО! драйвера (такие как nvidia) надо будет ставить самому, не надеясь на систему!
(пр. я избавился от ошибки с xl2tpd - Failed to open /dev/pts/1: No such file or directory),
+
НО! драйвера (такие как nvidia) надо будет ставить самому, не надеясь на систему!
+
  
 
1. Первым делом возьмём исходники ядра (http://kernel.org),
 
1. Первым делом возьмём исходники ядра (http://kernel.org),
  
  ''дальшие действия выполняем из под root'' ('''sudo su -''' , или просто '''su -''')
+
  ''дальнейшие действия выполняем из под root'' ('''sudo su -''' , или просто '''su -''')
  
 
2. '''cd /usr/src'''
 
2. '''cd /usr/src'''
(место преднозначенное для ядра /usr/src/linux)
+
(место, предназначенное для ядра /usr/src/linux)
  
 
3. '''tar -xf ''<файл с исходниками>'''''
 
3. '''tar -xf ''<файл с исходниками>'''''
Строка 27: Строка 25:
 
  (если не стоит gcc, то ставим стандартными средствами)
 
  (если не стоит gcc, то ставим стандартными средствами)
  
6. нам нужен .config (можно сразу запустить '''make oldconfig''', а можно взять старый кониг, лежащий по адресу '''''/boot/config-<версия ядра>''''', и адаптировать к новому ядру, выполнив '''make oldconfig'''):
+
6. нам нужен .config (можно сразу запустить '''make oldconfig''', а можно взять старый конфиг, лежащий по адресу '''''/boot/config-<версия ядра>''''', и адаптировать к новому ядру, выполнив '''make oldconfig'''):
 
  cp /boot/config-<версия ядра> /usr/src/linux/.config
 
  cp /boot/config-<версия ядра> /usr/src/linux/.config
 
  '''make oldconfig''' (если новые опции нужны по умолчанию, то надо написать: '''yes "" | make oldconfig''')
 
  '''make oldconfig''' (если новые опции нужны по умолчанию, то надо написать: '''yes "" | make oldconfig''')
Строка 33: Строка 31:
 
7. если есть желание что-то поменять, то надо выполнить '''make menuconfig''' (нужно доставить ncurses-devel), '''make xconfig''' или '''make gconfig''' (можно уточнить тип процессора или включить/выключить устройство).
 
7. если есть желание что-то поменять, то надо выполнить '''make menuconfig''' (нужно доставить ncurses-devel), '''make xconfig''' или '''make gconfig''' (можно уточнить тип процессора или включить/выключить устройство).
  
8. если /boot/ монтируется отдельно, позаботимя и том чтобы /boot/ был примонтирован.
+
8. если /boot/ монтируется отдельно, позаботимся о том чтобы /boot/ был примонтирован.
  
 
9. '''после''' выполнить:
 
9. '''после''' выполнить:
  1. '''make -jN''', где '''N''' - кол-во потоков, можно поставить по кол-ву ядер (долно выполняется).
+
  1. '''make -jN''', где '''N''' - кол-во потоков, можно поставить по кол-ву ядер (долго выполняется).
 
  2. '''make modules_install'''
 
  2. '''make modules_install'''
  3. '''make -jN install''' (долно выполняется).
+
  3. '''make -jN install''' (долго выполняется).
 
  4. '''make headers_install''' (если не знаешь что это, то оно не нужно, а ипользуется для сборки системных вещей таких как gcc, glibc)
 
  4. '''make headers_install''' (если не знаешь что это, то оно не нужно, а ипользуется для сборки системных вещей таких как gcc, glibc)
  
10. на данный момент все нужные файлы в /boot/ и всё уже сделанно, открываем конфиг загрузчика и проверяем настройки (должна появится новая секция для нового ядра, но если нет то можно дописать её по анологии).
+
10. на данный момент все нужные файлы в /boot/ и всё уже сделано, открываем конфиг загрузчика и проверяем настройки (должна появится новая секция для нового ядра, но если нет то можно дописать её по аналогии).
  
НО в если initrd не собран dracut, то у Вас получился очень большьой файл загрузчика (100-200 MB), и если это Вас не устраивает, то стоит собрать всё с dracut.
+
НО в если initrd не собран dracut, то у Вас получился очень большой файл загрузчика (100-200 MB), и если это Вас не устраивает, то стоит собрать всё с dracut.
  
11. ставим dracut и перезагружаемя (должно быть новое ядро).
+
11. ставим dracut и перезагружаемся (должно быть новое ядро).
  
12. проверяем версю ядра ('''uname -r''') и, если всё в порядке, то запускаем '''dracut -H -f /boot/<ваш initrd>''' (будет созданно новый initrd, но только с тем что надо для загрузки).
+
12. проверяем версию ядра ('''uname -r''') и, если всё в порядке, то запускаем '''dracut -H -f /boot/<ваш initrd>''' (будет создано новый initrd, но только с тем, что надо для загрузки).
  
13. если всё в порядке, то в ubuntu лучше удалить старые ядра системой пакетов вашего дистрибутива (apt-get purge linux-image* linux-headers-generic*), а в fedora аналогично снесете что-то нужное.
+
13. если всё в порядке, то стоит заблокировать обнавление ядра:
 +
yum или dnf: добавти в нужный репозиторий строчку 'exclude=kernel*'. Обычно он в /etc/yum.repos.d/{название дистрибутива}-update.repo
 +
zypper: zypper al kernel-desktop
 +
apt: apt-mark hold linux-image*
  
 
*проверялось на ubuntu 12.04 и на CentOS 6.3 (на нем надо было сменить параметр default в загрузчике)
 
*проверялось на ubuntu 12.04 и на CentOS 6.3 (на нем надо было сменить параметр default в загрузчике)
Строка 56: Строка 57:
 
  '''make menuconfig'''
 
  '''make menuconfig'''
 
  make
 
  make
  make modules_install  
+
  make modules_install
*если доступ к компьютеру затруднителен, то читаем замечательную статью про настройку grub. [[http://ru.gentoo-wiki.com/wiki/HOWTO_%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B4%D1%80%D0%B0_%D0%BD%D0%B0_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5 grub: Установка нового ядра на удаленном сервере.]]
+
# если есть модули собраные через dkms(пример для ядра 4.1.4):
 +
# dkms autoinstall -k 4.1.4
 +
make install
 +
дальше нужно обеспечить загрузку первого ядра
 +
grub2-set-default 0
 +
или нжного ядра:
 +
просмотр конфига: '''grub2-mkconfig'''
 +
выбор нужного ядра: '''grub2-set-default 'CentOS Linux 7 (Core), with Linux 4.1.4''''
 +
 
 +
[[Категория:Linux]]

Текущая версия на 05:48, 17 августа 2015

Хочу представить очень простой способ установки ядра linux:

ОТСТОРОЖНО:

если использовать стандартный конфиг (что и будет делаться ниже), то:
/usr/src/linux - около 8 GB
/lib/modules/<версия ядра> - около 2 GB

Новое ядро может понадобится для повышения функциональности или исправления ошибок (к примеру, я избавился от ошибки с xl2tpd - Failed to open /dev/pts/1: No such file or directory), НО! драйвера (такие как nvidia) надо будет ставить самому, не надеясь на систему!

1. Первым делом возьмём исходники ядра (http://kernel.org),

дальнейшие действия выполняем из под root (sudo su - , или просто su -)

2. cd /usr/src (место, предназначенное для ядра /usr/src/linux)

3. tar -xf <файл с исходниками> (если пакет назывался linux-3.5.3.tar.bz2, то появится linux-3.5.3)

4. ln -s linux-<версия ядра> linux

(по стандарту ядро должно быть в /usr/src/linux)

5. cd linux

(если не стоит gcc, то ставим стандартными средствами)

6. нам нужен .config (можно сразу запустить make oldconfig, а можно взять старый конфиг, лежащий по адресу /boot/config-<версия ядра>, и адаптировать к новому ядру, выполнив make oldconfig):

cp /boot/config-<версия ядра> /usr/src/linux/.config
make oldconfig (если новые опции нужны по умолчанию, то надо написать: yes "" | make oldconfig)

7. если есть желание что-то поменять, то надо выполнить make menuconfig (нужно доставить ncurses-devel), make xconfig или make gconfig (можно уточнить тип процессора или включить/выключить устройство).

8. если /boot/ монтируется отдельно, позаботимся о том чтобы /boot/ был примонтирован.

9. после выполнить:

1. make -jN, где N - кол-во потоков, можно поставить по кол-ву ядер (долго выполняется).
2. make modules_install
3. make -jN install (долго выполняется).
4. make headers_install (если не знаешь что это, то оно не нужно, а ипользуется для сборки системных вещей таких как gcc, glibc)

10. на данный момент все нужные файлы в /boot/ и всё уже сделано, открываем конфиг загрузчика и проверяем настройки (должна появится новая секция для нового ядра, но если нет то можно дописать её по аналогии).

НО в если initrd не собран dracut, то у Вас получился очень большой файл загрузчика (100-200 MB), и если это Вас не устраивает, то стоит собрать всё с dracut.

11. ставим dracut и перезагружаемся (должно быть новое ядро).

12. проверяем версию ядра (uname -r) и, если всё в порядке, то запускаем dracut -H -f /boot/<ваш initrd> (будет создано новый initrd, но только с тем, что надо для загрузки).

13. если всё в порядке, то стоит заблокировать обнавление ядра:

yum или dnf: добавти в нужный репозиторий строчку 'exclude=kernel*'. Обычно он в /etc/yum.repos.d/{название дистрибутива}-update.repo
zypper: zypper al kernel-desktop
apt: apt-mark hold linux-image*
  • проверялось на ubuntu 12.04 и на CentOS 6.3 (на нем надо было сменить параметр default в загрузчике)
  • если смущает больщая папка /lib/modules/<версия ядра> , то можно пересобрать ядро с более точным выбором опций
cd /usr/src/linux
make menuconfig
make
make modules_install
# если есть модули собраные через dkms(пример для ядра 4.1.4):
# dkms autoinstall -k 4.1.4
make install

дальше нужно обеспечить загрузку первого ядра

grub2-set-default 0

или нжного ядра:

просмотр конфига: grub2-mkconfig
выбор нужного ядра: grub2-set-default 'CentOS Linux 7 (Core), with Linux 4.1.4'