Я хочу автоматизировать установку пакетов Emacs с помощью Cask, Puppet и Vagrant.
Источник
https://github.com/mcandre/mcandre-ubuntu
Действия по воспроизведению
Я могу сделать это вручную в Emacs на моем Mac:
$ emacs
M-: (cask-install)
C-x C-c
Это успешно устанавливает мои любимые пакеты бочек, что позволяет мне использовать их в моем .emacs
.
Я также могу сделать это как встроенную команду bash:
$ emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"
Я также могу сделать это внутри Vagrant:
$ vagrant ssh
vagrant@precise64$ emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"
Я даже могу сделать это с помощью sudo
внутри Vagrant, что станет полезным позже, так что Puppet не записывает мои файлы Emacs как root
.
vagrant@precise64$ /usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"
Однако, когда я пытаюсь выполнить команду из сценария Puppet как exec { ... }
, по какой-то причине она не работает.
command => "/usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval \"(progn (require 'cask \\\"~/.cask/cask.el\\\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))\""
след
debug: Puppet::Type::Package::ProviderApt: Executing '/usr/bin/apt-cache policy emacs24'
debug: Exec[cask](provider=posix): Executing '/usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"'
debug: Executing '/usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"'
err: /Stage[main]//Exec[cask]: Failed to call refresh: /usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))" returned 1 instead of one of [0] at /tmp/vagrant-puppet-1/manifests/default.pp:210
Я попытался временно упростить команду до:
command => "/usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval \"(kill-emacs)\""
Но и это не помогает.
Еще немного контекста
Я пишу конфигурацию Vagrant для сумасшедшей среды разработки, с множеством языков программирования и текстовых редакторов. Я планирую добавить пакеты для D, Dart, Go, Rust; и настроить nano
и, возможно, R Studio. Так как я сталкиваюсь с ошибками, я пока держу небольшую настройку Vagrant: git, Vim и Emacs.
Работая над конфигурацией Puppet для Vim, я обнаружил, что некоторым командам требуются специальные конфигурации среды оболочки, например, обеспечение того, что для HOME
задано значение /home/vagrant
. Я попробовал это с помощью команды emacs, но этого недостаточно.
Я даже пытался передать все переменные окружения из обычного vagrant user bash shell в команду emacs, но это тоже не сработало.
Актуальные вопросы
- Что
emacs -q --eval ...
требует, чтобы Puppet/sudo не предлагали? - Могу ли я предоставить больше опций для emacs и / или Puppet, чтобы заставить неудачную команду напечатать более конкретное сообщение об ошибке?
Спекуляции
Я использую:
- Бочка 0.5.2
- Emacs 24 на моем Mac и в Vagrant
- Ubuntu Precise Pangolin 12.04 x64
- VirtualBox 4.3.6
- Бродяга 1.4.3
- Доморощенный 0.9.5
- Mac OS X 10.9.1 Mavericks
Но я почти уверен, что ошибка связана с неверной конфигурацией с моей стороны в скрипте manifests/default.pp
Puppet, а не с какой-либо ошибкой в программном стеке.
Кросс-пост от Reddit.