我有一个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不是这样。
有没有人遇到过这个?
感谢您的任何建议。
答案 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重新创建此文件。
我希望这可以帮到你。
最好的问候。