Установить пакет из определенного репо с марионеткой - PullRequest
0 голосов
/ 22 апреля 2019

У меня проблема с установкой пакета из репозитория Debian Buster в системе, в которой есть два репозитория, эта проблема затронет большинство пакетов, которые мы разворачиваем с помощью puppet. Puppet пытается установить его из нашего локального репо.

Мы работаем с несколькими кластерами Ganeti с Ubuntu 16 на оборудовании, а также на виртуальных машинах. Теперь мы решили перейти на Debian стабильную для аппаратного обеспечения. У нас есть локальное репо в компании, чтобы предоставить наши конкретные пакеты, а также некоторые пакеты Ubuntu. Я установил новый кластер Ganeti с Debian и некоторыми виртуальными машинами для фазы тестирования.

код, который я использую, следующий:

package { 'haproxy':
  ensure => latest,
}

на ВМ я установил пакет haproxy вручную, потому что у меня была ошибка, описанная ниже, и я попытался посмотреть, что произойдет, если пакет уже присутствует в системе, чтобы у меня была следующая ситуация:

# apt-cache policy haproxy
haproxy:
  Installed: 1.8.19-1
  Candidate: 1.8.19-1ppa1~xenial
  Version table:
     1.8.19-1ppa1~xenial 500
        500 http://our.local.repo/local-xenial local-xenial/main amd64 Packages
 *** 1.8.19-1 500
        500 http://ftp.de.debian.org/debian buster/main amd64 Packages
        100 /var/lib/dpkg/status
  .....
  .....
  .....

Когда я запускаю puppet agent на узле, я получаю ошибку:

The following packages have unmet dependencies:
 haproxy : Depends: libssl1.0.0 (>= 1.0.2~beta3) but it is not installable
E: Unable to correct problems, you have held broken packages.
Error: /Stage[main]/puppet_haproxy::Base/Package[haproxy]/ensure: change from 1.8.19-1 to 1.8.19-1ppa1~xenial failed: Could not update: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install haproxy' returned 100: Reading package lists...
Building dependency tree...
Reading state information...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 haproxy : Depends: libssl1.0.0 (>= 1.0.2~beta3) but it is not installable
E: Unable to correct problems, you have held broken packages.

Таким образом, очевидно, что puppet пытается обновить пакет до 1.8.19-1ppa1~xenial, что связано с latest в ресурсе пакета. Я не хочу менять атрибут обеспечения на installed или present, а скорее пытаюсь заставить код работать как на Ubuntu (что он делает), так и на Debian. Изменение Pin-Priority также не будет хорошей идеей, поскольку нам нужно, чтобы некоторые наши стандартные пакеты из локального репозитория были установлены в каждой системе без изменения кода марионетки в каждом модуле. Единственное, о чем я подумал, - это добавить атрибут install_options, чтобы ресурс пакета был следующим (я его еще не тестировал):

if $facts['operatingsystem'] == 'Debain' {
  package { 'haproxy':
    ensure          => latest,
    install_options => ['-t', 'buster'],
  }
} else {
  package { 'haproxy':
    ensure => latest,
  }
}

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

Есть ли лучший способ добиться этого?

Спасибо

1 Ответ

3 голосов
/ 22 апреля 2019

Если вы устанавливали пакеты вручную из командной строки, в зависимости от конфигурации репозитория, которую вы описали, то вам нужно будет каждый раз указывать параметр командной строки, верно? Вам нужно будет либо указать конкретную версию пакета, либо модулировать список источников.

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

  1. Обновите конфигурацию своего репозитория, чтобы не не требовались дополнительные параметры. Например, возможно, вы можете разделить ваш локальный репо на два, один из которых имеет более низкий приоритет, чем дистрибутив, а другой - более высокий. Или, возможно, вам нужен отдельный репо для Debian, чем для Ubuntu. OR

  2. Измените Package ресурсы, объявленные в ваших манифестах Puppet, возможно, в виде дистрибутива. Хотя вы можете использовать условные операторы для достижения любой необходимой дистро-специфичности, я бы предложил вместо этого подход, основанный на данных, основанный на параметризованных классах и Hiera.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...