[Arch Build System](/index.php/Arch_Build_System "Arch Build System") позволит вам собрать собственное ядро на основе официального пакета Linux. Этот метод предлагает автоматизировать весь процесс компиляции и основан на тщательно протестированном пакете. Вы можете отредактировать PKGBUILD для использования собственных настроек ядра или для добавления дополнительных патчей.

## Contents

*   [1 Получение необходимых пакетов](#.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.B5.D0.BE.D0.B1.D1.85.D0.BE.D0.B4.D0.B8.D0.BC.D1.8B.D1.85_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2)
*   [2 Редактирование PKGBUILD](#.D0.A0.D0.B5.D0.B4.D0.B0.D0.BA.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_PKGBUILD)
    *   [2.1 Изменение build()](#.D0.98.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_build.28.29)
    *   [2.2 Пересоздание контрольных сумм](#.D0.9F.D0.B5.D1.80.D0.B5.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D1.8C.D0.BD.D1.8B.D1.85_.D1.81.D1.83.D0.BC.D0.BC)
*   [3 Компиляция](#.D0.9A.D0.BE.D0.BC.D0.BF.D0.B8.D0.BB.D1.8F.D1.86.D0.B8.D1.8F)
*   [4 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
*   [5 Загрузчик](#.D0.97.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D1.87.D0.B8.D0.BA)

## Получение необходимых пакетов

[Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") пакет [abs](https://www.archlinux.org/packages/?name=abs) и группу пакетов [base-devel](https://www.archlinux.org/groups/x86_64/base-devel/) из [официальных репозиториев](/index.php/Official_repositories_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Official repositories (Русский)").

Во-первых, вам нужно иметь чистое ядро перед началом вашей настройки. Выберите файлы пакетов ядра с ABS:

 `$ ABSROOT=. abs core/linux` 

Если RSYNC порт блокируется сетевым экраном, вы можете попробовать запустить команду с параметром -t, чтобы использовать архив для синхронизации.

 `$ ABSROOT=. abs core/linux -t` 

Затем, получите все остальные файлы, которые вам потребуются (например, пользовательские файлы конфигурации, патчи и т.д.) из соответствующих источников.

## Редактирование PKGBUILD

Отредактируйте PKGBUILD официального пакета linux.

Укажите имя вашего пакета в параметре `pkgbase`, например :

```
 pkgbase=linux-custom

```

### Изменение build()

Если вам нужно изменить несколько опций можно использовать `config` по умолчанию и добавить в него необходимые вам опции :

```
$ echo '
CONFIG_DEBUG_INFO=y
CONFIG_FOO=n
' >> config.x86_64

```

Также вы можете использовать утилиту с графическим интерфейсом для настройки параметров. Для этого раскомментируйте одну из возможных, указанных в prepare() функций в PKGBUILD, например:

 `PKGBUILD` 
```
...
  # load configuration
  # Configure the kernel. Replace the line below with one of your choice.
  #make menuconfig # CLI menu for configuration
  make nconfig # new CLI menu for configuration
  #make xconfig # X-based configuration
  #make oldconfig # using old config from previous kernel version
  # ... or manually edit .config
...

```

Если у вас уже есть файл конфигурации ядра `config` , раскомментируйте один из интерактивных инструментов конфигурации, например, `nconfig`, и при необходимости загрузите ваш ​​ `config` оттуда во избежании каких-либо проблем с именованием ядра, которые в противном случае могут возникнуть (за исключением make menuconfig - см. ниже).

**Примечание:** Если вы раскомментируйте 'make menuconfig' в build(), а затем используете графический интерфейс MENUCONFIG для загрузки существующей конфигурации, вы столкнетесь с проблемой конфликта файлов в конце пакета. Это произойдет в связи с тем, что файл конфигурации перезапишется. PKGBUILD предлагает уникальный путь установки LOCALVERSION и параметры конфигурации LOCALVERSION_AUTO. Чтобы это исправить, просто укажите в LOCALVERSION названии пользовательского ядра и LOCALVERSION_AUTO=n в MENUCONFIG. Для получения дополнительной информации см. [https://bbs.archlinux.org/viewtopic.php?id=173504](https://bbs.archlinux.org/viewtopic.php?id=173504)

**Примечание:** Если вы раскомментируйте *return 1*, то сможете изменить директорию с исходниками ядра по окончании распаковки makepkg, а затем make nconfig. Это позволяет сконфигурировать ядро под несколько сессий. Когда вы будете готовы для компиляции, скопируйте файл .config поверх config или config.x86_64 (в зависимости от вашей архитектуры), закомментируйте *return 1* и используйте **makepkg -i**. Но не используйте это для пользовательских патчей; разместите ваши измененные комманды после этих строк. Если вы вручную изменяли bztar, распакуйте и заменить патч.

### Пересоздание контрольных сумм

Т.к. файл настройки был изменен, необходимо сгенерировать новые контрольные суммы, запустив:

```
$ updpkgsums

```

## Компиляция

**Tip:** [Одновременный запуск процессов компиляции](/index.php/Makepkg#MAKEFLAGS "Makepkg") может значительно сократить время компиляции на многоядерных системах.

Теперь можно приступить к компиляции ядра обычной командой `makepkg`. Если вы выбрали интерактивную программу для настройки параметров ядра (напр. menuconfig), вы должны присутствовать во время компиляции.

**Примечание:** Ядру нужно время чтобы скомпилироваться. Компиляция в течение 1 часа это вполне нормально. На современных системах с SSD обычно это занимает менее десяти минут.

## Установка

После makepkg, вы можете посмотреть файл linux.install. Можно заметить, что некоторые переменные изменились. Теперь пакет можно установить,как обычно, с помощью pacman (или эквивалентной программы):

```
# pacman -U <kernel-headers_package>
# pacman -U <kernel_package>

```

**Примечание:** Желательно так же установить kernel headers. Он может понадобится, если, к примеру, понадобится установить драйвера NVIDIA с [nvidia-hook](/index.php/NVIDIA#Alternate_install:_custom_kernel "NVIDIA")

## Загрузчик

К этому времени файлы и каталоги для собранного вами ядра должны быть созданы, например, `/boot/vmlinuz-linux-test`. Для проверки вашего ядра нужно обновить загрузчик (/boot/grub/menu.lst для GRUB), добавив новые записи ('default' and 'fallback') для вашего свежесозданного ядра. Таким образом, вы можете паралельно хранить и основное и собранное вами ядра.