Problemas ao executar o 'emacs --eval' do Puppet

0

Eu quero automatizar a instalação de pacotes do Emacs com o Cask, o Puppet e o Vagrant.

Fonte

link

Etapas para reproduzir

Eu posso fazer isso manualmente no Emacs no meu Mac:

$ emacs
M-: (cask-install)
C-x C-c

Isso instala com sucesso meus pacotes de barris favoritos, permitindo que eu os use no meu .emacs .

Também posso fazer isso como um comando bash in-line:

$ emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"

Eu também posso fazer isso dentro do Vagrant:

$ vagrant ssh
vagrant@precise64$ emacs -q --eval "(progn (require 'cask \"~/.cask/cask.el\") (cask-initialize) (setq save-abbrevs nil) (cask-install) (kill-emacs))"

Eu posso até fazer isso com sudo dentro do Vagrant, o que será útil depois, então o Puppet não escreve meus arquivos Emacs como 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))"

No entanto, quando tento executar o comando a partir de um script Puppet como exec { ... } , ele falha por algum motivo.

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))\""

Rastreio

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

Eu tentei simplificar temporariamente o comando para:

command => "/usr/bin/sudo -u vagrant /usr/bin/emacs -q --eval \"(kill-emacs)\""

Mas isso também falha.

Mais contexto

Estou escrevendo uma configuração do Vagrant para um ambiente de desenvolvimento maluco, com muitas linguagens de programação e editores de texto. Eu pretendo adicionar pacotes para D, Dart, Go, Rust; e para configurar o nano e talvez o R Studio. Como estou encontrando erros, estou mantendo minha configuração do Vagrant pequena por enquanto: git, Vim e Emacs.

Enquanto trabalhava na configuração do Puppet para o Vim, descobri que alguns comandos precisam de configurações especiais do ambiente de shell, como garantir que HOME esteja definido como /home/vagrant . Eu tentei isso com o comando emacs, mas não é o suficiente.

Até tentei fornecer todas as variáveis de ambiente do shell bash do usuário vagrant normal para o comando emacs, mas isso também não funcionou.

Perguntas sobre gravação

  • O que o emacs -q --eval ... exige que o Puppet / sudo não ofereça?
  • Posso fornecer mais opções ao emacs e / ou ao Puppet para obter o comando com falha para imprimir uma mensagem de erro mais específica?

Especificações

Estou usando:

  • Cask 0.5.2
  • Emacs 24 no meu Mac e no Vagrant
  • Ubuntu Precise Pangolin 12,04 x64
  • VirtualBox 4.3.6
  • Vagrant 1.4.3
  • Homebrew 0.9.5
  • Mac OS X 10.9.1 Mavericks

Mas tenho certeza que o erro se deve a uma configuração incorreta da minha parte no script manifests/default.pp Puppet, em vez de qualquer bug na pilha de software.

Cross-post de Reddit .

    
por mcandre 08.02.2014 / 21:59

1 resposta

0

Por sugestão do steckerhalter, eu consegui executar o código Emacs Lisp em linha do Puppet com --batch , para que um shell tty de usuário interativo não seja mais necessário:

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))\""
    
por 09.02.2014 / 00:29