Инструменты пользователя

Инструменты сайта


// 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

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

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

Комментарии