У меня проблема с установкой пакета из репозитория 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,
}
}
Но это означает, что я должен изменить все ресурсы пакета в каждом модуле при возникновении конфликта, которого я хочу избежать.
Есть ли лучший способ добиться этого?
Спасибо