воскресенье, 8 января 2012 г.

Как отучить yum по умолчанию инсталлировать 32-битные пакеты в 64битном CentOS 5

Сегодня при использовании Chef я очередной раз столкнулся с особенностью CentOS 5 x86_64 - если в yum install не указать архитектуру инсталлируемого пакета, то кроме 64-битной версии установится 32-битная.

Как следствие использование в Chef конструкции

  package "packetname"
приведет к инсталляции двух пакетов (packetname.i386 и packetname.x86_64)вместо одного (явно указать архитектуру можно, но только в yum_package, что усложняет рецепт если у Вас есть сервера c Ubuntu)


Использование exclude

Чтобы избежать установки 32-битных пакетов практически везде в yum.conf рекомендуют добавить параметр

 exclude=*.i?86
Но это неудобно тем, что:

  • Параметр нужно добавлять избирательно (только на 64-битных серверах)
  • Если понадобится проинсталлировать 32-битный пакет, yum его не найдет (нужно временно закомментировать exclude)
  • Перестанет работать автоматическое обновление для всех уже установленных 32-битных пакетов (yum-updatesd)

Использование multilib_policy

Оказалось есть более подходящее решение: в yum.conf нужно прописать в параметр

  multilib_policy=best
(по умолчанию используется значение all)

В CentOS 6 такой проблемы нет, т.к. этот параметр уже выставлен в best по умолчанию:

# grep 'multilib_policy = ' /usr/lib/python2.6/site-packages/yum/config.py               
    multilib_policy = SelectionOption('best',('best, 'all'))