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 .