我是在Windows上使用puppet的新手。 我尝试从我们网络上的共享文件夹安装MSI软件包,但是对权限这样做,共享文件夹是" read"只是,它没有"执行"权限因此,当木偶代理运行并尝试安装MS时,它会失败。
我想要做的是只在需要安装软件包时才将MSI安装程序复制到本地目录。
这就是我安装软件包并复制到本地目录的方式:
class app_install {
package { '7-Zip 9.38 (x64 edition)':
provider => windows,
ensure => installed,
source => 'c:\\temp\7zip_testInstall.msi',
install_options => ['INSTALLDIR=C:\apps64\7-Zip'],
}
file { 'c:/temp/7zip_testInstall.msi':
ensure => 'file',
mode => '0660',
group => 'Domain Users',
source => 'c:\\temp\7zip_testInstall.msi',
}
当我运行puppet并且发现没有安装包时,它会将文件复制到c:\ temp,然后继续安装包。这是预期的行为。 在后续运行的puppet代理程序中,它发现软件包已经安装,因此它会跳过安装,但如果c:\ temp中缺少安装程序,则会再次将安装程序复制到c:\ temp - 给定事实这是一个临时文件夹,它经常被清除。
我试图避免的是在已安装软件包的情况下复制安装程序。
我不确定该怎么做。
请告知并谢谢!
Fr3edom21。
答案 0 :(得分:3)
我能够回答我的问题。
我没有使用“文件资源”将MSI从网络共享复制到c:\ temp,而是只有在所述程序的Uninstall注册表项版本值为的情况下才通过“exec资源”执行文件复制。失踪。 像这样:
exec { 'copy MSI to c:\temp':
command => 'C:\\windows\system32\cmd.exe /c "copy \\server\repo\7zip_testinstall.msi c:\\temp"',
unless => 'C:\Windows\System32\reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2702-0938-00000100000 /f 9.38.00.0',
}
我希望这可以帮助任何有类似问题的人。
如果你走这条路,有几件事需要考虑:
C:\Windows\System32
实际上会被重定向(由Windows“File System Redirector”到C:\Windows\SystemWOW64
32位system32二进制文件直播。如果需要64位system32二进制文件,则应考虑使用c:\Windows\sysnative
。如果您使用的是64位版本的Puppet,则不会遇到此问题,并且不应使用sysnative,因为它不存在。如果您使用的是Puppet 3.7.3+,则可以使用$system32
fact来处理混合环境。有关详细信息,请参阅Handling File Paths on Windows。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
是四个不同位置之一。再次使用32位Puppet,除非使用注册表模块,否则您将受到注册表重定向的限制。如果软件可以安装为32位,则可能需要检查它是否也存在于HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
,如果您运行的是64位Puppet,或者不受注册表重定向器的约束。Fr3edom21。