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. * набор патчей, которые накладываются поверх нужного комита.

Вся эта информация так же содержится в файле 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/