到目前为止,我一直使用以下方法在 Tomcat 6 上安装 Solr 3.x:
package { 'openjdk-6-jdk' :
ensure => installed,
}
package { 'solr-tomcat' :
ensure => installed,
}
exec { 'tomcat-port':
command => "sed -i.bak 's|port=\"8080\"|port=\"8983\"|g' /etc/tomcat6/server.xml",
path => ["/bin", "/usr/bin"],
}
service { 'tomcat6' :
ensure => running,
require => Package['solr-tomcat'],
}
然而我想在 Tomcat 7 上安装 Solr 4.x,但 Debian 似乎没有适合 Solr 的软件包(例如solr-tomcat
)。
到目前为止,Tomcat 7 的运行方式如下:
package { [ 'tomcat7', 'tomcat7-admin' ]: ensure => installed, }
service { 'tomcat7' : ensure => running, }
exec { 'tomcat-port':
command => "sed -i.bak 's|port=\"8080\"|port=\"8983\"|g' /etc/tomcat7/server.xml",
path => ["/bin", "/usr/bin"],
}
但是我如何安装 Solr 4.x?
答案1
您可以创建自己的 Debian 软件包并将其托管在自己的存储库中。FPM 等项目(https://github.com/jordansissel/fpm) 在这里帮了大忙。另一个选择是从项目网站检索 Solr tarball,并管理一系列exec
语句以将其提取到 Tomcat 安装中的 webapps 目录中。
答案2
最简单的方法是定义exec
,例如:
exec { "solr-download":
command => "/usr/bin/wget http://archive.apache.org/dist/lucene/solr/4.9.1/solr-4.9.1.tgz && /bin/tar -xf solr-4.9.1.tgz"
cwd => "/opt",
creates => "/opt/solr-4.9.1.tgz",
}
为了获得更灵活的解决方案,您必须编写一个类(solr4-tomcat.pp), 例如:
class solr {
# variables
$version = '4.10.4'
$data_dir = "/opt/solr/data"
$home_dir = "/opt/solr/home"
$tomcat_version = "tomcat7"
$tomcat_base = "/var/lib/${tomcat_version}"
$tomcat_user = $operatingsystem ? {
/RedHat|CentOS/ => "tomcat",
/Debian|Ubuntu/ => $tomcat_version,
}
# includes
include solr::files
class { 'tomcat': install_from_source => false }
# Ensure Java libraries are installed
package { "java":
ensure => present,
name => $operatingsystem ? {
'Centos' => $operatingsystemrelease ? {
'6.0' => "java-1.6.0-openjdk.$hardwaremodel",
'*' => 'openjdk-7-jre',
},
/Debian|Ubuntu/ => 'openjdk-7-jre-headless',
},
}
# Set port 8983 for Tomcat 7 and make sure it's running.
tomcat::instance {'default': package_name => $tomcat_version} ->
tomcat::service {'default':
service_name => 'tomcat7',
service_ensure => 'running',
use_jsvc => false, use_init => true,
# use_jsvc => true, java_home => "/usr/lib/jvm/java-7-openjdk-amd64",
}->
tomcat::config::server { $tomcat_version:
catalina_base => $tomcat_base,
port => 8983,
}
class solr::files {
# Ensure solr directories are present.
file { 'home_dir':
path => $solr::home_dir,
ensure => directory,
recurse => true,
}
file { 'data_dir':
path => $solr::data_dir,
ensure => directory,
recurse => true,
owner => $solr::tomcat_user,
group => $solr::tomcat_user,
}
# Download and extract solr
exec { "solr-extract":
path => ['/usr/bin', '/usr/sbin', '/bin'],
command => "curl -s http://archive.apache.org/dist/lucene/solr/${solr::version}/solr-${solr::version}.tgz | tar zxf -",
cwd => "/opt/solr",
require => [File["data_dir"], File["home_dir"]],
creates => "/opt/solr/solr-${solr::version}/dist/solr-${solr::version}.war",
}
# Logging setup for Tomcat.
exec { 'solr-install-logging-jars':
path => ['/usr/bin', '/usr/sbin', '/bin'],
cwd => "/opt/solr",
command => "cp -v /opt/solr/solr-${solr::version}/example/lib/ext/*.jar /opt/solr/solr-${solr::version}/dist/solrj-lib/*.jar /opt/solr/solr-${solr::version}/example/resources/log4j.properties ${solr::tomcat_base}/webapps/solr/WEB-INF/lib",
onlyif => "test ! -f ${solr::tomcat_base}/webapps/solr/WEB-INF/lib/log4j-1.2.17.jar",
require => Exec['solr-extract'],
}
}
tomcat::war { 'solr.war':
catalina_base => $tomcat_base,
war_source => "/opt/solr/solr-${solr::version}/dist/solr-${solr::version}.war",
require => Class["solr::files"],
notify => Service[$tomcat_version],
}
}
检查替代清单: