Как установить Solr 4.x на Tomcat через Puppet?

До сих пор я использовал следующий рецепт для установки Solr 3.x на Tomcat 6:

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'],
}

Однако я бы хотел установить Solr 4.x на Tomcat 7, но, похоже, у 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?

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],
  }

}

Оформить заказ на альтернативные манифесты:

Вы можете создать свой собственный пакет Debian и разместить его в своем собственном репозитории. Такие проекты, как FPM ( https://github.com/jordansissel/fpm), очень помогают здесь. Другим вариантом является получение архива Solr с веб-сайта проекта и управление серией exec заявления, чтобы извлечь его в каталог webapps в вашей установке Tomcat.

Другие вопросы по тегам