Vagrant中的Puppet配置器期望site.pp为US-ASCII,失败并出现“无效字节序列”

时间:2014-04-21 16:25:34

标签: vagrant puppet ubuntu-14.04

我有一个Vagrant框(Ubuntu 14.04 beta),它使用Puppet配置器进行自我配置。在" vagrant up"之后,shell配置程序运行,安装更新(包括language-pack-en),并将语言环境设置为en_US.UTF-8,例如:

export DEBIAN_FRONTEND=noninteractive
echo "LC_ALL=en_US.UTF-8" >> /etc/environment
apt-get update
apt-get -y install language-pack-en
export LC_ALL=en_US.UTF-8
wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb 2>&1
dpkg -i puppetlabs-release-trusty.deb
apt-get update
apt-get -y upgrade 
apt-get -y -f remove puppet hiera ruby-hiera ruby-safe-yaml
apt-get -y autoremove
apt-get -y install puppet=3.4.3-1

shell配置程序完成没有问题,但是puppet配置程序失败了:

Error: Could not parse for environment production: invalid byte sequence in US-ASCII at /tmp/vagrant-puppet-1/manifests/site.pp:1

如果我立即运行vagrant provision,则Puppet配置程序会运行而不会出现问题,这让我怀疑它不尊重我在/etc/environment设置的区域设置,并且导出作为环境变量以获得良好的衡量标准(可能没有必要,这是一个故障排除步骤)。

我首先使用Ubuntu 13.10遇到了这个问题,但设置环境变量解决了这个问题 - 14.04不是这样。

有没有人遇到过这个?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:3)

这是由Puppet守护程序未读取正确的语言环境引起的,即使它之前由shell配置程序设置。

虽然可以通过在Puppet守护程序运行时设置LANG=en_US.UTF-8来缓解这种情况,但Vagrant目前还不支持在运行时将环境变量传递给Puppet。此处描述了该问题:https://github.com/mitchellh/vagrant/issues/2270

上面的链接还提供了一种解决方法。问题线程中的解决方法与将代理服务器设置为env有关。变量,但我修改了它以类似的方式设置LANG

Vagrantfile

config.vm.provision :puppet do |puppet|
  puppet.facter = {
    # Specifying the LANG environment variable this way is a work around.  
    # The work around can be removed when this issue is fixed https://github.com/mitchellh/vagrant/issues/2270
    "hack=hack LANG=en_US.UTF-8 hack" => "hack"
  }

将此添加到Vagrantfile的Puppet配置程序会正确设置LANG,并且Puppet会在首次启动时按预期运行。

答案 1 :(得分:0)

当我没记错的时候,我遇到了木偶和错误格式的问题。它可以存储为dos格式。

否则你的site.pp中有些内容似乎有误。通过vim从vagrant VM重新创建此文件。

我希望这可以帮到你。

最好的问候。