2

我有一个 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 中不是这样。

有没有人遇到过这个?

感谢您的任何建议。

4

2 回答 2

3

这是由于 Puppet 守护程序没有读取正确的语言环境造成的,即使它以前是由 shell 配置程序设置的。

虽然可以通过设置LANG=en_US.UTF-8Puppet 守护程序的运行时间来缓解这种情况,但 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 在首次启动时按预期运行。

于 2014-05-06T18:52:37.510 回答
0

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

否则,您 site.pp 中的某些内容似乎是错误的。通过 vim 从 vagrant VM 重新创建此文件。

我希望这可以帮助你。

最好的祝福。

于 2014-05-05T14:14:45.823 回答