Виправлення служб, які були відключені в / etc / default / з лялькою?


13

Я використовую маріонетку, щоб (теоретично) отримати npcd для запуску після встановлення, проте в Ubuntu ця служба встановлюється з налаштуваннями за замовчуванням у / etc / default / npcd з RUN = "ні":

 $ cat /etc/default/npcd 
 # Default settings for the NPCD init script.

 # Should NPCD be started? ("yes" to enable)
 RUN="no"

 # Additional options that are passed to the daemon.
 DAEMON_OPTS="-d -f /etc/pnp4nagios/npcd.cfg"

Я думаю, що цей блок лялькових конфігурацій подбає про речі:

    service { "npcd":
       enable   => true,
       ensure   => "running",
       require  => Package["pnp4nagios"],
    }   

Але, на жаль, це не так, і якщо насправді переписати файл у / etc / default, я не впевнений, що робити. Чи є прямий спосіб включити послугу, яку я не бачу?

Для запису я використовую Ubuntu 12.04.2 та лялькову версію 3.1.0.


Чому б не просто переписати /etc/default/npcdз fileресурсом? Це fileзалежить від package, і serviceзалежить від file. Мені завжди потрібне редагування файлів через sedабо, augeasякщо я можу цього уникати.
larsks

Відповіді:


12

Оновити цей файл і потім перезапустити службу - це єдиний спосіб. Ви можете натиснути новий файл, а потім зробити послугу Потрібно; таким чином при оновленні вмісту сервіс належним чином запуститься.

Якщо ви не хочете повністю замінювати файл, ви можете скористатися інструментом Puppet augeas, щоб просто змінити один рядок у файлі за замовчуванням.

У Debian та його похідних є кілька сервісів, які не запускаються автоматично після встановлення пакета, якщо його не включено в / etc / default. Вид дратівливих.

Редагувати: FYI скрипт init насправді зчитує значення з цього файлу (як правило, його просто отримують).


1
Цікаво. Я маю на увазі подати помилку. Якщо ви встановите "enable" на "true", має сенс лише те, що він насправді дозволяє сценарій (на додаток до будь-яких різних посилань на виконання рівнів).
Метт Сіммонс,

Я думаю, що Лялькові немає простого способу дізнатись, чи потрібен сервісу файл «за замовчуванням» оновлений, щоб вони не запекли це; може бути простіше подати помилку з розподілом. Я сумніваюся, що ви отримаєте будь-яку тягу :-)
Лука

використовуйте визначений тип, який називається щось на кшталт "defaulted_service", який має сервіс-ресурс, а також ресурс exec, який оновлює файл на місці, використовуючи sed, якщо потрібно, або файловий ресурс, який використовує augeas.
Sirex

@MattSimmons Люди, які виготовляють ці пакунки, повинні використовувати символьні посилання та update-rc.dдля ввімкнення / відключення послуги, ні /etc/default- це не стандартний спосіб управління послугами, тому він перебуває поза контролем ляльок.
Шейн Медден

8

Для біса це я перевірив декілька стандартних демонів на своїх 12.04 машинах. Ви повинні керувати файлом, не обійшовши його в цей час.

snmpd

# snmpd control (yes means start daemon).
SNMPDRUN=yes

збирати

# 0: start collectd on boot, 1: do not start collectd on boot
# default: 0
DISABLE=0

ляльковий

# Start puppet on boot?
START=yes

mdadm

# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true

гапрокси

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1

6

Я думаю, що одним із можливих способів зробити це є використання інструменту augeas з лялькою, наприклад

augeas { "npcd_default":
  changes => [
    "set /files/etc/default/npcd/Run yes",
  ],
}

Докладніше див. у посібнику


0

Я використовую sed для зміни файлу. Аугеас здається непосильним.

sed -i /etc/default/puppet -e 's/START=no/START=yes/'

Ідея, взята звідси:

http://www.codelord.net/2010/12/19/using-puppet-to-automatically-configure-new-ec2-in вещества/

Отже, у вашому випадку

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'

1
якщо ти вважаєш, що аугей - це надмірність, чи не маріонеткова надмірність? :) Ваше рішення також нормально, але ви припускаєте, що у вас є файл і потрібний рядок, і що робити, якщо його немає? це просто вийде з ладу, не сказавши вам нічого. Я вважаю, що Augeas настільки надійний, зручний та цілеспрямований, що його варто встановити, якщо ви використовуєте лялечку
DukeLion

Мій приклад був із маріонетки завантаження через хмарно-ініт. Я подивився на авгей і відразу вирішив уникнути цього, якщо це можливо. Поки мені не потрібні були augeas, і мені не потрібно було завантажувати ще одну службу, окрім маріонетки, щоб почати = так.
dmourati

Мені дуже цікаво ваша точка зору. Я можу бачити вашу думку, але хіба авджи та маріонетки не використовують ту саму ідеологію надання абстрактного інтерфейсу верхнього рівня для єдиного управління? Тож якщо вам не подобаються ауджі, як вам подобається лялька? Чому б тоді не відповідати?
DukeLion

Я думаю, що кращим підходом є редагування файлів конфігурації заглушки або фрагментів, таких як apache conf.d, sysctl.d, sudoers.d і т.д. У найпростішому випадку, коли фрагментованих файлів конфігурації з каталогами .d не існує, використовуйте sed / perl / як завгодно. Таким чином, немає необхідності в аугеях.
dmourati

0

Зробити це з augeasтипом у Ляльковий - це один із способів (як це запропонував @DukeLion).

Іншим способом є використання augeasprovidersмодуля з shellvarпровайдером:

shellvar { 'npcd_default':
  ensure   => present,
  target   => '/etc/default/npcd',
  variable => 'RUN',
  value    => 'yes',
  comment  => 'We want npcd to run',
}

Це краще, тому що Augeas буде використовуватися чисто постачальником Ruby. Він також керуватиме цитуванням та коментуванням автоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.