#shell #ansible #archlinux #pacman-package-manager
#оболочка #ansible #archlinux #pacman-менеджер пакетов
Вопрос:
Я пытаюсь установить pacaur с помощью скрипта через Ansible:
curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash
С помощью команды ansible
ansible 192.168.1.2 -m shell -a "curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash"
Но я pacman
жалуюсь pod2man
на отсутствие. Похоже, проблема с ПУТЕМ к команде ansible.
Запуск команды на компьютере напрямую с использованием ssh работает корректно.
Вот результат: ansible -m all shell -a 'echo $PATH'
localhost | SUCCESS | rc=0 >>
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
192.168.1.2| SUCCESS | rc=0 >>
/usr/bin:/bin:/usr/sbin:/sbin
Комментарии:
1. Нужно ли это делать специальным способом (в этом случае самый быстрый способ решить проблему — войти по ssh и установить его вручную), или вы согласны с написанием сборника пьес? Вы пробовали использовать
command
orshell
вместо этого? Как насчет запуска скрипта, который сначала повторяетPATH
?2. более вероятный ПУТЬ sudo. pacaur_install.sh вызывает pacman через sudo. Похоже, что pod2man не находится в ПУТИ sudo. Вам нужно либо настроить сценарий установки, чтобы задать ПУТЬ в вызове sudo, либо настроить ПУТЬ в sudoers.
3. @XiongChiamiov причина, по которой мне нужен ansible, заключается в том, что на самом деле мне нужно установить его на нескольких машинах :). Однако я опубликовал результат скрипта, повторяющий
PATH
@sborsky, который, по-видимому, является причиной. этот вопрос кажется связанным. Хотя при обычном ssh я получаю правильноеPATH
.
Ответ №1:
free-form
Параметр модуля сценария ожидает
путь к локальному файлу скрипта, за которым следуют необязательные аргументы.
Так ansible 192.168.1.2 -m script -a "https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh"
не должно работать. Это должно сработать, если вы загрузите скрипт на свой хост управления Ansible и установите параметр произвольной формы в локальный путь скрипта.
Комментарии:
1. Вы правы. Я вставил неправильную команду ansible. Теперь я отредактировал текст вопроса. Извините и спасибо.
2. Вы проверили, что скрипт является исполняемым?
3. Также
script
является правильным модулем, чем.shell
модуль значительно лучше.4. Вы правы. Я соответствующим образом отредактировал тело после тестирования правильной команды. Все еще проблема.
5. Вам необходимо установить
PATH
через docs.ansible.com/ansible/playbooks_environment.html или задайте полный путь в скрипте.
Ответ №2:
Как сообщается в комментариях, проблема заключается в том, что при переключении пользователей sudo
происходит очистка PATH
(подробности см. В Этом вопросе ServerFault).
Специальная команда для экспорта локального PATH
файла на хосты, которую я предлагаю, кажется немного хакерской, но она работает (она использует --extra-vars
опцию ansible
command вместе с введением переменной Jinja)
ansible all -m shell -a "export PATH={{path}}; curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash" -e path=$PATH
Вы также можете использовать {{ lookup('env', 'PATH') }}
для пересылки PATH
.