Сегодня при использовании 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'))