Как я создаю RPM-пакет, который привел бы ВКУСНУЮ транзакцию к сбою, если определенным критериям соответствуют

Возможности состоят в том, что Вы вслепую полагаете, что Ваша карта должна поддерживаться всеми этими драйверами. Я предположил бы, что все следующее происходит сразу:

  • Ваша карта, под кодовым названием Turke, требует версии 2.6.38 Linux или более новый. Существует также несколько драйверов ВЫШИВАЛЬНОГО ШЕЛКА для карт AMD - существует все еще более старый драйвер (UMS), который даже не перечисляет Северные Острова в матрице функции. Необходимо проверить, является ли драйвер, который Вы пытаетесь использовать, более новым воплощением драйвера, KMS один, что любые части из ядра являются достаточно новыми для обеспечения любого необходимого Северного Связанного с островами материала и что версия Linux (ядро), которое Вы выполняете, один с драйвером (доверяющий странице драйвера, ≥2.6.38)

  • Собственные доступные драйверы медов AMD, которые включают поддержку нескольких карт сразу. Этим драйверам дают номера версий, и более новые карты добавляются в более новых версиях, при этом некоторые более старые карты заглядываются некоторые из этих выпусков (забавный подход, я знаю). Проверьте, включает ли версия драйвера, предлагаемого в репозитории на самом деле, поддержку Вашей карты (я предполагаю, что можно попросить у диспетчера пакетов номера версии и пойти проверка в веб-странице AMD, если дистрибутив не ведет такой список).

Так, прежде, чем попытаться установить и настроить драйвер, проверьте, поддерживает ли драйвер, который Вы хотите установить и настроить на самом деле, карту, Вы хотите использовать с ним.

(Вы могли всегда пытаться установить драйверы непосредственно от AMD, но остерегаться этого, поскольку это двоичные, драйверы с закрытым исходным кодом, в то время как специалисты по обслуживанию дистрибутива могут гарантировать, что версия репозитория, по крайней мере, кажется, работает хорошо с другими компонентами системы, нет никакого способа, которым можно быть уверены новейшие драйверы от восходящей работы, что Вы не получите проблемы устойчивости или катастрофические отказы.)

3
04.04.2014, 04:32
2 ответа

и в том файле спецификации пакета, в разделе %pre, я сделал различные тесты, которые я хотел выполнить, произведение тестовых ошибок, когда применимо, и затем 'выходит 1'.

Это не работает, об/мин не останавливается/раскручивает транзакцию, когда %pre сценарии перестали работать как этот. об/мин не ведет себя с транзакциями ACID различными способами, из которых это - то. Необходимо будет добавить конфликты для остановки транзакции на этапе depsolve.

2
27.01.2020, 21:28
  • 1
    Добавляют конфликты во время транзакции для сбоя будущих пакетов? Не уверенный я понимаю. Я знаю, что это не работает (я не задал бы вопрос, если это действительно работало во-первых ;)) - мой вопрос состоит в том, как точно делают Вы заставляете Конфетку останавливаться. На данный момент (так как никто не ответил здесь к настоящему времени), то, что я сделал, должно было просто записать 'блокирующийся' файл, если какой-либо тестовый сбой, и имеет все другие пакеты, который зависит от meta пакета, теста для существования того файла блокирования, и если это существует, прервите себя на этапе %pre также. Однако это - работа вокруг луга проблема, не решение. –  Shimi 22.08.2013, 20:22
  • 2
    Разъясниться далее: Те пакеты могут все быть установлены одновременно. Нет никакого фактического конфликта здесь - просто случай, в котором я не хочу пакета, установленного, если критериям не соответствуют. Если runlevel пример не был достаточно хорош, вот тот, который хорош: Я не хочу, чтобы имя хоста было localhost, поскольку это испортит кластерную инициализацию, я собираюсь сделать во время одной из тех установок об/мин. Следовательно, я хочу это, если имя хоста будет localhost, то ничто не будет установлено и таким образом инициализировало. –  Shimi 22.08.2013, 20:24
  • 3
    Право, я понимаю..., что Вы хотите динамический deps. (Например, выполненный сценарий X, и это говорит Вам, если существует конфликт или нет. То, что я говорю: Это не работает в об/мин. Весь deps. (Например, требует, или конфликты) должны быть известны, прежде чем транзакция запускается, таким образом, Вы не можете изменить их в scriptlet, и Вы не можете сделать, чтобы они были динамичными (Например, на основе имени хоста). Отметьте ESP что динамической deps. проблемой, даже если был способ сделать это..., что Вы делаете, когда имя хоста, если "вздор", транзакция/установка происходит, и затем имя хоста изменяется на "localhost". Это - самая очевидная проблема. –  James Antill 26.08.2013, 22:28
  • 4
    На самом деле об/мин не является проблемой; об/мин ведет себя прекрасный для меня. Это - КОНФЕТКА, которая переносит об/мин, который не работает, поскольку можно было бы ожидать..., что это просто предполагает, что каждый пакет установлен успешно..., который, по моему скромному мнению, забавен. Почему запущенный "Тест Транзакции" во-первых? Позвольте нам просто предположить, что это будет работать. 'Имя хоста' не имеет никакой причины измениться после установки. То, что я хочу, должно избежать значения по умолчанию (localhost) - как один из моих deps (Вы верили бы?) отказывается инициализировать, если имя является 'localhost', потому что это - кластерное приложение, и это хочет уникальное имя на каждом узле, который не может измениться во время кластерной жизни. –  Shimi 27.08.2013, 08:23
  • 5
    Так, я заставлю ждать кого-то для хождения с волшебным флагом для конфетки ;) Между тем я решил проблему путем выполнения в %pre каждого пакета, какая конфетка должна была сделать себя. Но все еще было бы радо узнать правильный способ сделать это, учитывая, что существует тот. –  Shimi 27.08.2013, 08:26

В принципе, вам не нужен волшебный флаг, но какая-то форма скрипта %pretrans, который проверяет ваши требования, верно? %pretrans доступен с rpm 4.4. Проверьте http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Syntax или, может быть, http://wiki.networksecuritytoolkit.org/nstwiki/index.php/RPM_Quick_Reference#Secret_.25pretrans_and_.25posttrans_RPM_Scriptlets

Для получения дополнительной информации, смотрите обсуждение и недостатки на https://fedorahosted.org/fpc/ticket/22

Так что создайте скриптлет %pretrans, соберите там все ваши тесты (уровень выполнения, имя хоста) и все, что угодно, а когда общий $? равняется 0, транзакция начнется, если нет, то будет неудачной.

Хотя такой подход определенно звучит как логическая ошибка.


Для вашего вопроса, почему yum не остановится с неудачным первым пакетом: Потому что, по сути, вы говорите ему установить, скажем, дюжину пакетов. Один из них провалится, но другие не зависят от этого (так как в противном случае вы получите круговые зависимости, которые также могут быть хитрыми), так что остальные будут установлены. Это нормальное поведение. Вы можете изменить все зависимые пакеты на Requires(pre): yourmetapackagehere >= some.version

Чтобы изменить порядок установки всех зависимостей, вы можете использовать "контекстно-меченные зависимости" (ordered dependencies), например, this resource

0
27.01.2020, 21:28

Теги

Похожие вопросы