Puppet Windows程序包提供程序编码错误

时间:2015-05-24 06:55:34

标签: ruby windows encoding puppet

我有一个Windows的Puppet清单,用于下载和安装Python(以及其他内容)。过去工作得很好。现在它在尝试处理MSI文件时给出了与字符串编码有关的奇怪错误。清单的相关部分是:

(注意:我使用pget下载MSI。)

# Prepare to download things

$downloads = "C:\\puppet-downloads"

file { $downloads:
    ensure => directory
}
Pget {
    require => File[$downloads],
    target  => $downloads,
}

$python      = 'python'
$py_version  = '2.7.10'
$py_dir      = "C:\\Python27"
$py_msi      = "python-${py_version}.msi"
$py_msi_path = "${downloads}\\${py_msi}"

pget {'python-msi':
    source => "https://www.python.org/ftp/python/${py_version}/${py_msi}",
}

package {$python:
   require  => Pget['python-msi'],
   provider => 'windows',
   source   => $py_msi_path,
   ensure   => $py_version,
}

错误输出:

  

错误:无法从UTF-16LE转换为UTF-8到IBM437,将软件包提供程序' windows':U + 2122预取到IBM437

     

错误:/ Package [python]:无法评估:从UTF-16LE转换为UTF-8到IBM437的U + 2122到IBM437

我发现了什么:

  • U + 2122是商标字符(™)
  • 错误的格式来自Ruby字符串转换函数,而不是任何特定于Puppet的函数。
  • 即使清单的这一部分单独运行,也会发生错误。
  • puppet的调试输出应用列表" default_encoding = IBM437"接近开始,但我还没有找到任何改变这种设置的方法:
  

调试:运行时环境:puppet_version = 3.7.5,ruby_version = 2.1.5,run_mode = user,default_encoding = IBM437

3 个答案:

答案 0 :(得分:2)

看起来实际上是为此打开了一张票:https://tickets.puppetlabs.com/browse/PUP-4333

看起来问题是已经安装了不兼容字符的软件包,它会尝试预取已安装的软件包:

现在的解决方法(来自故障单):

  • 运行" wmic产品获得名称"
  • 查找具有非ascii字符的
  • 从注册表中删除奇怪的字符

答案 1 :(得分:0)

在命令提示符下运行chcp 65001会将控制台编码更改为UTF-8。

我不知道这将如何适合您的工作流程。

答案 2 :(得分:0)

我的一台基础设施笔记本电脑出现了类似的问题,而且它是唯一一台安装了Skype™7.0的笔记本电脑。我在注册表中进行了搜索,并使用DisplayName或ProductName从每个键中删除了该TM。有效。但是,为了以防万一我备份了。因此,我确认您可以检查您安装的某个程序是否在名称中包含此字符,因此您可以在Windows注册表中删除。但要小心。