Когда я создаю свой dockerfile, который делает следующее:
FROM debian:jessie
...
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" > /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get update \
&& apt-get install ansible
Я добираюсь:
The following packages have unmet dependencies:
ansible : Depends: python-jinja2 but it is not installable
Depends: python but it is not installable
Depends: python-yaml but it is not installable
Depends: python-paramiko but it is not installable
Depends: python-httplib2 but it is not installable
Depends: python-six but it is not installable
Depends: python-crypto (>= 2.6) but it is not installable
Depends: python-setuptools but it is not installable
Depends: sshpass but it is not installable
Depends: python-pkg-resources but it is not installable
Не был должен процесс установки ansible уже устанавливает эти пакеты? Я - вид новичка в это, но как я знаю, один пакет может перечислить зависимости для других пакетов, итак, почему они не устанавливают автоматически? Не был должен debian также идти с Python, по крайней мере?
Я поместил их в Кв. - получают сценарий и это worket, но разве это не должно быть автоматически? Что, если новый ansible пакет в ppa требует большего количества пакетов? Это повредило бы мой dockerfile
Вместо того, чтобы переопределить /etc/apt/sources.list
файл с помощью >
можно добавить текст с помощью >>
.
, Таким образом, это будет что-то подобное следующему.
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" >> /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get update \
&& apt-get install -y ansible
Попытайтесь добавить -f
опция к apt-get install
, который пытается зафиксировать поврежденные зависимости. До выполнения apt-get update
можно также хотеть работать apt-get clean
для очистки локального способного repo. Они работали на мою сборку Packer, которая использует поставщика Ansible.
Ваш код стал бы:
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" > /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get autoclean \
&& apt-get update \
&& apt-get install -f ansible
Для дополнительных деталей я рекомендую этот превосходный ответ к более широкому вопросу, "Как я разрешаю невстреченные зависимости после добавления PPA?"
Для поддерживаемых в настоящее время версий Ubuntu Вы можете обновить свою систему с помощью неподдерживаемых пакетов из этого ненадежного PPA , добавив ppa: ansible / ansible в источники программного обеспечения вашей системы.
deb http://ppa.launchpad.net/ansible/ansible/ubuntu YOUR_UBUNTU_VERSION_HERE main
deb-src http://ppa.launchpad.net/ansible/ansible/ubuntu YOUR_UBUNTU_VERSION_HERE main
Вы можете установить ansible, используя следующие команды.
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
Обратите внимание, что если вы используете версию Ubuntu до 18.04 , нет переключателя -u
или - update
для apt-add-repository
, поэтому, если это ваш случай, оставьте переключатель - update
в третьей строке кода выше.
Источники:
man apt-add-repository