Сборка ядра / make kernel — различия между версиями
(→Хочу представить очень простой способ установки ядра linux:) |
|||
(не показано 19 промежуточных версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | == Хочу представить очень простой | + | == Хочу представить очень простой способ установки ядра linux: == |
'''ОТСТОРОЖНО:''' | '''ОТСТОРОЖНО:''' | ||
Строка 6: | Строка 6: | ||
/usr/src/linux - около 8 GB | /usr/src/linux - около 8 GB | ||
/lib/modules/<версия ядра> - около 2 GB | /lib/modules/<версия ядра> - около 2 GB | ||
+ | |||
+ | Новое ядро может понадобится для повышения функциональности или исправления ошибок (к примеру, я избавился от ошибки с 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 -''') |
2. '''cd /usr/src''' | 2. '''cd /usr/src''' | ||
− | (место | + | (место, предназначенное для ядра /usr/src/linux) |
3. '''tar -xf ''<файл с исходниками>''''' | 3. '''tar -xf ''<файл с исходниками>''''' | ||
− | ( | + | (если пакет назывался linux-3.5.3.tar.bz2, то появится linux-3.5.3) |
4. '''ln -s linux-''<версия ядра>'' linux''' | 4. '''ln -s linux-''<версия ядра>'' linux''' | ||
Строка 23: | Строка 25: | ||
(если не стоит gcc, то ставим стандартными средствами) | (если не стоит gcc, то ставим стандартными средствами) | ||
− | 6. нам нужен .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''') | ||
Строка 29: | Строка 31: | ||
7. если есть желание что-то поменять, то надо выполнить '''make menuconfig''' (нужно доставить ncurses-devel), '''make xconfig''' или '''make gconfig''' (можно уточнить тип процессора или включить/выключить устройство). | 7. если есть желание что-то поменять, то надо выполнить '''make menuconfig''' (нужно доставить ncurses-devel), '''make xconfig''' или '''make gconfig''' (можно уточнить тип процессора или включить/выключить устройство). | ||
− | 8. если /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, то у Вас получился очень | + | НО в если initrd не собран dracut, то у Вас получился очень большой файл загрузчика (100-200 MB), и если это Вас не устраивает, то стоит собрать всё с dracut. |
− | 11. ставим dracut и | + | 11. ставим dracut и перезагружаемся (должно быть новое ядро). |
− | 12. проверяем | + | 12. проверяем версию ядра ('''uname -r''') и, если всё в порядке, то запускаем '''dracut -H -f /boot/<ваш initrd>''' (будет создано новый initrd, но только с тем, что надо для загрузки). |
− | 13 | + | 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 в загрузчике) | ||
Строка 54: | Строка 57: | ||
'''make menuconfig''' | '''make menuconfig''' | ||
make | make | ||
− | make modules_install | + | 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'''' | ||
+ | |||
+ | [[Категория: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'