Hatred's Log Place

DON'T PANIC!

Mar 2, 2017 - 2 minute read - Comments - linux

linux-tools для mainline ядер в Ubuntu

Иногда приходится использовать mainline не из основных репозиториев, а отсюда: * http://kernel.ubuntu.com/~kernel-ppa/mainline

Причин тому может быть несколько. Начиная от желания быть на острие атаки, и заканчивая тем, что на новых ядрах решена проблема характерная для вашего железа или другого окружения. У меня, к примеру, только с 4.10 перестал уходить в тотальный перегрев процессор при использовании Turbo Boost.

Беда этих ядер, что нет полезных пакетов linux-tools, которые требуются таким приложениям как perf и turbostat. И их нужно собрать самому, причём так, что бы они соответствовали версии ядра. Рассмотрим как это сделать, на примере 4.10.

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

Открываем http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/ и видим: * откуда брать исходники:``` git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack

  * на каком комитте основан билд:```
v4.10 (c470abd4fde40ea6a0846a2beab642a578c0b8cd)
```Эта же информация дублируется в файле [COMMIT](http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/COMMIT).
  * набор патчей, которые накладываются поверх нужного комита.

Вся эта информация так же содержится в файле [SOURCES](http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/SOURCES):

git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack v4.10 c470abd4fde40ea6a0846a2beab642a578c0b8cd 0001-base-packaging.patch 0002-UBUNTU-SAUCE-add-vmlinux.strip-to-BOOT_TARGETS1-on-p.patch 0003-UBUNTU-SAUCE-tools-hv-lsvmbus-add-manual-page.patch 0004-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch 0005-debian-changelog.patch 0006-configs-based-on-Ubuntu-4.10.0-6.8.patch

Итак, сначала забираем исходники:
  git clone git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack

Переходим в полученный каталог:
  cd mainline-crack

После чего копируем сюда все патчи, перечисленные в SOURCES (они лежат там же, рядом). Как вы их заберёте разницы никакой, я предполагаю, что они уже лежат в `mainline-crack`.

Теперь берём нужный комит и накладываем патчи:
  git checkout -b v4.10 c470abd4fde40ea6a0846a2beab642a578c0b8cd
  git am *.patch

Дальше отстройка:
  fakeroot debian/rules clean
  DEB_BUILD_OPTIONS=parallel=8 fakeroot debian/rules binary-indep
  DEB_BUILD_OPTIONS=parallel=8 fakeroot debian/rules binary-perarch

Первая команда подготовит дерево. Вторая соберёт пакеты заголовочных файлов, документации и общие пакеты linux-tools-common и linux-cloud-tools-common. Третья команда соберёт непосредственно пакеты linux-tools и linux-cloud-tools.

Теперь их можно поставить:
  sudo dpkg -i linux-tools-*.deb

и при необходимости:
  sudo dpkg -i linux-cloud-tools-*.deb

Такой вариант требует минимальное время и не требует полной перестройки. К сожалению, его недостаточно для функционирования `perf` и Ко, так как они пытаются найти бинарники в `/usr/lib/linux-tools/$(uname -r)`, а пакет linux-tools-*.deb ставит их в `/usr/lib/linux-tools-VER`, где в версии нет всяких `-generic`. Но! В целевом каталоге лежат только ссылки на бинари из второго каталога. Пакет, который их создаст имеет суффикc `-generic` и отстроится только при полной отстройке:
  DEB_BUILD_OPTIONS=parallel=8 fakeroot debian/rules binary-debs

или так, если что-то пошло не так:
  DEB_BUILD_OPTIONS=parallel=8 skipabi=true skipmodule=true do_tools=true no_dumpfile=1 do_zfs=false fakeroot debian/rules binary-debs

Но у меня отстройка упорно падает на ZFS. 

Вариантов два:
  1. правильные бинари звать вручную, указывая полный путь, типа `/usr/lib/linux-tools-VER/perf`
  2. или сделать симлинк:```
sudo ln -s /usr/lib/linux-tools-4.10.0-041000 /usr/lib/linux-tools/4.10.0-041000-generic

Мне второго варианта хватило. Если подскажете, как легче отстроить эти последние пакеты, буду сильно благодарен.

Полезные ссылки по теме: * https://wiki.ubuntu.com/Kernel/MainlineBuilds * https://help.ubuntu.com/community/Kernel/Compile * http://askubuntu.com/questions/842709/linux-kernel-4-8-4-custom-compilation-linux-tools-packages-not-built * http://blog.avirtualhome.com/compile-mainline-kernel-ubuntu/