Qwo*_*rty 7 php linux sql-server puppet
要安装使用 PHP Microsoft SQL Driver for Linux 所需的 mssql-tools 附带的 msodbcsql,需要以下命令
sudo ACCEPT_EULA=Y apt-get install mssql-tools
Run Code Online (Sandbox Code Playgroud)
但是,当使用 Puppet 安装时,会失败,当前使用的 puppet 代码
package { 'mssql-tools' : ensure => latest, }
Run Code Online (Sandbox Code Playgroud)
但这会返回一个错误:
ERROR: The EULA was not accepted. Installation aborted.
Run Code Online (Sandbox Code Playgroud)
Puppet 需要什么才能成功安装这个包。我已经尝试在调用 package 命令之前设置环境变量。
Exec { environment => [ "ACCEPT_EULA=Y" ] }
Run Code Online (Sandbox Code Playgroud)
微软的安装说明在这里:
https://blogs.msdn.microsoft.com/sqlnativeclient/2017/02/04/odbc-driver-13-1-for-linux-released/
这是驱动程序页面:
https://www.microsoft.com/en-us/sql-server/developer-get-started/php/ubuntu/
看来这是一个被要求的功能;使用环境值运行包实体。
但由于有一个功能冻结,这不会在 puppet 4.x 中实现(https://projects.puppetlabs.com/issues/6400)
解决方法是不使用包实体而是使用 exec 实体:
exec { "/usr/bin/apt-get -yq install msodbcsql":
environment => "ACCEPT_EULA=Y",
unless => "/usr/bin/dpkg -l msodbcsql | tail -1 | grep ^ii",
}
Run Code Online (Sandbox Code Playgroud)
其中 except 用于使其幂等,以便在已安装软件包的情况下不运行。
此方法的缺点是,只有在使用 apt-get 时才有效,如果您希望它也能在其他系统上工作,您应该提供一个$osfamilywith if 语句来使用正确的包管理器。