воскресенье, 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'))

пятница, 30 декабря 2011 г.

Обновление корневых сертификатов в CentOS

Думаю многие сталкивались с ситуацией, когда linux не распознает корректно подписанные сертификаты при использовании https

Например:
$ wget  'https://github.com'
--2011-12-30 20:45:26--  https://github.com/
Resolving github.com... 207.97.227.239
Connecting to github.com|207.97.227.239|:443... connected.
ERROR: cannot verify github.com's certificate, issued by `/C=US
/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV CA-1':
  Unable to locally verify the issuer's authority.
To connect to github.com insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.
$ git clone https://github.com/rails/rails
Cloning into rails...
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify
failed while accessing https://github.com/rails/rails/info/refs
fatal: HTTP request failed

Это происходит из-за отсутствия в файле ca-bundle.crt корневого сертификата центра, подписавшего сертификат сайта. В случае с github отсутствует сертификат фирмы DigiCert Inc.

Для решения этой проблемы нужно обновить ca-bundle с сайта curl:
  curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt 

Причем обновление пакета openssl не затирает этот файл:
Running Transaction
  Updating       : openssl                                                1/4 
warning: /etc/pki/tls/certs/ca-bundle.crt created as /etc/pki/tls/certs/ca-bundle.crt.rpmnew