Каков наиболее стабильный способ сделать заголовки/разработку ядра Linux требованием для RPM и Deb?

Я ищу «лучший»* метод для добавления заголовков ядра Linux и библиотек разработки в качестве требования к RPM и пакету Debian, которые я делаю. Я знаю, что могу добавить тег «Requires: blah» в файл RPM .spec и что я могу сделать аналог в управляющем файле Debian, но это заставит пользователя загружать последние заголовки/devel ядра... не их текущие заголовки /devel.

Например, предположим, что пользователь работает с ядром Linux версии 3.4, а последняя версия — 3.5. Если они устанавливают RPM через yum и не имеют заголовков ядра или библиотек разработки, они загрузят заголовки 3.5 и библиотеки разработки. Но когда программное обеспечение отправляется в сборку, оно попытается найти заголовки 3.4 и библиотеки разработки и потерпит неудачу.

Спасибо!


person Tamarzan    schedule 26.11.2012    source источник
comment
не могли бы вы рассказать о своей мотивации немного больше   -  person toxicate20    schedule 26.11.2012
comment
Конечно, я пытаюсь установить модуль ядра, используя RPM/Debs, и хотел бы, чтобы модуль связывался с заголовками для любого ядра, которое использует пользователь. Таким образом, им не нужно использовать последнее ядро, чтобы гарантировать установку заголовков/devel.   -  person Tamarzan    schedule 27.11.2012
comment
По крайней мере, в Debian версии заголовков ядра имеют именно такую ​​зависимость, поэтому пользователь получает заголовки установленного ядра, а не какую-то произвольную версию.   -  person tripleee    schedule 27.11.2012


Ответы (3)


Debian, по крайней мере, легко позволяет указать конкретную версию в Build-Depends:. Обычно вы этого не хотите, но это вполне возможно.

person tripleee    schedule 26.11.2012
comment
К сожалению, я стараюсь не указывать версию во время сборки. Если бы был способ потребовать заголовки для ядра $(uname -r), это было бы идеально. - person Tamarzan; 27.11.2012
comment
Это то, что пользователь получает с неверсионной зависимостью. Или, если вы имеете в виду версию вашего ядра во время упаковки, сгенерируйте при сборке, но тогда вы не скажете, что не хотите устанавливать во время сборки, не так ли? - person tripleee; 27.11.2012
comment
Я думал, что если необходимый пакет не установлен, yum/apt загрузит последнюю версию. Если он достаточно умен, чтобы настроить эту логику для пакетов, связанных с ядром, это здорово, и мне нужно посмотреть, делает ли это то же самое в rpm! - person Tamarzan; 27.11.2012

Я не понимаю, почему что-то вроде этого не будет хватать (что-то типа минимального ядра требуется)

Requires: kernel >= 3.5
BuildRequires: kernel-headers >= 3.5
person drahnr    schedule 29.11.2012
comment
Я не хочу/не должен ограничивать ядро, которое использует пользователь. Скорее, мне просто нужно установить соответствующие заголовки, когда пользователь переходит к установке. - person Tamarzan; 29.11.2012
comment
Извините, если я упустил суть, но по какой причине вам требуются более новые заголовки ядра? Если вашему двоичному файлу требуются более новые заголовки ядра, то, вероятно, ему также требуется более новое ядро, а если нет, то вам также следует разрешить использование более старых заголовков ядра. Мне кажется, это скорее ограничение программного обеспечения, которое вы упаковываете, чем проблема с управлением пакетами - поправьте меня, если я ошибаюсь. Из POV управления пакетами вам нужно будет самостоятельно упаковать соответствующее ядро ​​и поставить его в качестве обновления. Или, как хак, поставьте их вместе с пакетом напрямую (это не очень поощряет). - person drahnr; 30.11.2012
comment
Я думаю, что его проблема заключается в указании зависимости заголовков для текущего ядра. Когда вы говорите, что менеджер пакетов заголовков ядра может получить более новую версию, чем установленная, в то время как вам нужны совпадающие. - person Eugene; 07.12.2012
comment
Если он действительно требует некоторых конкретных заголовков, как он заявил, то это должно быть Requires: kernel-headers = 3.4, хотя имхо, sw лучше исправить. Это не похоже на что-то разумное. - person drahnr; 09.12.2012
comment
Можно использовать какой-то стабильный API, одинаковый для большинства версий ядра, которые вам интересны, но по-прежнему требуют заголовков для текущего работающего ядра, а не для какого-то новейшего ядра, доступного в репозитории. Многие модули ядра имеют это требование. Я не думаю, что это возможно, не без запуска отдельного скрипта для обнаружения дистрибутива и работающего ядра и применения некоторых эвристик для захвата соответствующего пакета с использованием соответствующих средств. (потому что, конечно, они называют их по-разному в разных дистрибутивах, не говоря уже обо всех параметрах управления пакетами...). - person Eugene; 08.01.2013
comment
Пакеты deb/rpm почти всегда зависят от дистрибутива. Я предлагаю вам создать пакет для каждого дистрибутива, который вы хотите поддерживать, а не прыгать от проблемы к сумасшедшей и частично неразрешимой проблеме (проблемам). Это не стоит вашего времени. Что касается проблемы с заголовками, вы проверили, что произойдет, если вы просто выполните «Require: kernel-headers» с более новым ядром в удаленном репозитории, чем вы установили? (Просто возьмите livecd или что-то в этом роде, подключите флешку с вашим пользовательским пакетом и просто попробуйте установить, и посмотрите, что произойдет, если вы попытаетесь установить свой пакет) - person drahnr; 08.01.2013

я предполагаю, что вы пытаетесь собрать/упаковать некоторые сторонние модули ядра (поскольку, на самом деле, это единственный тип пакета, который должен зависеть от заголовков ядра).

если это так, вы, вероятно, захотите посмотреть, как упакованы другие модули ядра, например, проверьте dkms, который поддерживается всеми основными дистрибутивами, и используйте его для сборки модуля ядра.

person umläute    schedule 02.01.2013