Назад | Перейти на главную страницу

Puppet: не удалось найти сценарий инициализации для "squid"

Я использую Puppet для установки ufdbGuard, для которого требуется Squid 2.7 (который правильно установлен и работает правильно).

Вот соответствующий класс:

class pns_client::squid {

package { 'squid':
  ensure => present,
  before => File['/etc/squid/squid.conf'],
}


if $::ufdbguard_installed == "true" {
    $squidconf = 'puppet:///modules/pns_client/squid.conf_ufdbguard'
} else {
    $squidconf = 'puppet:///modules/pns_client/squid.conf'
}

notify{$squidconf:}

file { '/etc/squid/squid.conf':
  ensure => file,
  mode   => 644,
  source => $squidconf,
}

service { 'squid':
  ensure     => running,
  enable     => true,
  hasrestart => true,
  hasstatus  => true,
  subscribe  => File['/etc/squid/squid.conf'],
}
}

При запуске выдает такую ​​ошибку:

err: /Stage[main]/Pns_client::Squid/Service[squid]: Could not evaluate: Could not find init script for 'squid'

Это происходит на всех недавно установленных машинах Debian 6 и Unbuntu 10.04 / 11.04.

Любые идеи?

Это ваша первая установка сервера Ubuntu? В таком случае вы должны знать, что многие пакеты перешли с традиционных сценариев init.d на выскочку. Squid был бы таким пакетом. Это означает, что нет настоящего /etc/init.d/squid. Вместо этого это символическая ссылка, но вы сможете увидеть ее, если сделаете ls -la /etc/init.d. Настоящий сценарий запуска - это задача-выскочка в /etc/init/squid.conf.

Вам нужно изменить свой манифест service определение к этому:

service { 'squid':
  ensure     => 'running',
  provider   => 'upstart',
  hasrestart => 'true',
  hasstatus  => 'true',
  subscribe  => File['/etc/squid/squid.conf'],
}

Обратите внимание, что провайдер марионеток-выскочка не может enable сервис, поэтому эту директиву включать не следует.

Кальмар вроде называется squid3 в apt-get и это сообщение об ошибке делает происходит, когда имя пакета неверно.

Это просто означает, что нет /etc/init.d/squid, или это не исполняемый файл. Найдите правильное имя и установите либо name или path к правильному значению.

У меня была аналогичная проблема, решение выглядело так (ссылка на отчет об ошибке включена):

  file { $upstartfile:
    ensure => present,
    source => "puppet:///elasticsearch/etc-init-elasticsearch.conf",
  }

  # for http://projects.puppetlabs.com/issues/14297
  file { '/etc/init.d/elasticsearch':
    ensure => link,
    target => "/lib/init/upstart-job",
  }

  service { 'elasticsearch':
    ensure        => running, 
    hasrestart    => true,
    hasstatus     => true,
    provider      => 'upstart',
    subscribe     => [ File[$upstartfile], File['/etc/init.d/elasticsearch'] ],
  }

Т.е. символическая ссылка в /etc/init.d названный elasticsearch к /lib/init/upstart-job.

Я думаю, что эта проблема связана с тем, что Puppet не выполняет манифест последовательно. Таким образом, Puppet может попытаться запустить службу Squid перед установкой пакета Squid, и, конечно же, это вызовет ошибку.

Затем вы должны управлять зависимостями различных задач. Попробуйте внести это изменение:

service { 'squid':
  ensure     => running,
  enable     => true,
  hasrestart => true,
  hasstatus  => true,
  subscribe  => File['/etc/squid/squid.conf'],
  require => Package['squid'],
}

Удачи !