Hatred's Log Place

DON'T PANIC!

Mar 2, 2017 - 2 minute read - linux

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

Иногда приходится использовать 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

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

Полезные ссылки по теме:

Tags: kernel linux linuxmint ubuntu

iBus и Qt Creator CMake Imported Targets

comments powered by Disqus