Иногда приходится использовать 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.
Вариантов два:
-
правильные бинари звать вручную, указывая полный путь, типа
/usr/lib/linux-tools-VER/perf
-
или сделать симлинк:
sudo ln -s /usr/lib/linux-tools-4.10.0-041000 /usr/lib/linux-tools/4.10.0-041000-generic
Мне второго варианта хватило. Если подскажете, как легче отстроить эти последние пакеты, буду сильно благодарен.
Полезные ссылки по теме: