Я хочу автоматизировать установку пакетов 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.

1 ответ1

0

По предложению steckerhalter, я смог запустить встроенный код Emacs Lisp из Puppet с --batch , так что интерактивная пользовательская tty оболочка больше не требуется:

command => "/usr/bin/sudo -u vagrant /usr/bin/emacs -q --batch --eval \"(progn (require 'cask \\\"~/.cask/cask.el\\\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))\""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .