Memperbaiki layanan yang telah dinonaktifkan di / etc / default / with puppet?

13

Saya menggunakan boneka untuk (secara teoritis) mendapatkan npcd untuk memulai setelah instalasi, namun pada Ubuntu, layanan tersebut diinstal dengan pengaturan default di / etc / default / npcd dari RUN = "no":

 $ 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"

Saya akan berpikir bahwa blok konfigurasi boneka ini akan mengurus hal-hal:

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

Tapi sayangnya, tidak, dan benar-benar menulis ulang file di / etc / default, saya tidak yakin apa yang harus dilakukan. Apakah ada cara mudah untuk mengaktifkan layanan yang tidak saya lihat?

Sebagai catatan, saya menggunakan Ubuntu 12.04.2 dan boneka versi 3.1.0.

Matt Simmons
sumber
Mengapa tidak menulis ulang /etc/default/npcddengan filesumber daya saja? The filetergantung pada package, dan servicetergantung pada file. Saya selalu curiga mengedit file melalui sedatau augeasjika saya bisa menghindarinya.
larsks

Jawaban:

12

Memperbarui file itu dan memulai kembali layanan adalah satu-satunya cara. Anda dapat mendorong file baru dan kemudian membuat layanan Mengharuskannya; dengan cara itu ketika konten diperbarui layanan akan mulai dengan benar.

Jika Anda tidak ingin mengganti file seluruhnya, Anda dapat menggunakan alat Puppet augeas untuk hanya memodifikasi satu baris dalam file default.

Ada beberapa layanan di Debian dan turunannya yang tidak mulai secara otomatis setelah paket diinstal kecuali jika diaktifkan di / etc / default. Agak menyebalkan.

Sunting: FYI skrip init sebenarnya membaca nilai-nilai dari file itu (hanya sumber biasanya).

Luke
sumber
1
Menarik. Saya keberatan mengajukan bug. Jika Anda menetapkan "aktifkan" menjadi "benar", masuk akal bahwa skrip itu memang mengaktifkan skrip (selain berbagai symlink untuk menjalankan level).
Matt Simmons
Saya pikir tidak ada cara mudah bagi Puppet untuk mengetahui apakah suatu layanan akan memerlukan file "default" diperbarui sehingga mereka tidak mem-baknya; mungkin lebih mudah untuk mengajukan bug dengan distribusi. Saya ragu Anda akan mendapatkan traksi :-)
Luke
menggunakan tipe didefinisikan yang disebut sesuatu seperti "defaulted_service" yang memiliki sumber daya layanan, dan juga sumber daya exec yang memperbarui file di tempat menggunakan sed jika diperlukan, atau sumber daya file yang menggunakan augeas, terserah Anda.
Sirex
@MattSimmons Orang-orang yang membuat paket-paket ini harus menggunakan symlink dan update-rc.duntuk mengaktifkan / menonaktifkan layanan, bukan /etc/default- ini bukan cara standar untuk mengelola layanan, jadi itu di luar kendali boneka.
Shane Madden
8

Untuk itu saya memeriksa beberapa daemon standar pada mesin 12,04 saya. Anda harus mengelola file, tidak ada jalan lain pada saat ini.

snmpd

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

mengumpulkan

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

wayang

# Start puppet on boot?
START=yes

mdadm

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

haproxy

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

Saya pikir salah satu cara yang layak untuk melakukannya adalah menggunakan alat augeas dengan boneka, misalnya

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

lihat manual untuk detailnya

DukeLion
sumber
0

Saya menggunakan sed untuk memodifikasi file. Augeas sepertinya berlebihan.

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

Ide diambil dari sini:

http://www.codelord.net/2010/12/19/using-puppet-to-automatically-configure-new-ec2-inances/

Jadi, dalam kasus Anda

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'
dmourati
sumber
1
jika Anda berpikir augeas adalah pembunuhan berlebihan, bukankah boneka juga pembunuhan berlebihan? :) Solusi Anda juga ok, tetapi Anda menganggap bahwa Anda memiliki file dan memerlukannya, jadi bagaimana jika itu tidak ada? itu hanya akan gagal tanpa memberi tahu Anda apa-apa. Saya percaya augeas sangat kuat, nyaman, dan terarah sehingga layak
dipasang
Contoh saya adalah dari boneka bootstrap via cloud-init. Aku melihat augeas dan segera memutuskan untuk menghindarinya jika memungkinkan. Sejauh ini saya belum membutuhkan augeas atau saya perlu bootstrap layanan lain selain boneka untuk memulai = ya.
dmourati
Saya benar-benar ingin tahu tentang sudut pandang Anda. Saya bisa mengerti maksud Anda, tetapi bukankah augeas dan boneka menggunakan ideologi yang sama dengan menyediakan antarmuka tingkat atas abstrak untuk manajemen terpadu? Jadi, jika Anda tidak suka augeas, mengapa Anda suka boneka? Mengapa tidak mungkin saat itu?
DukeLion
Saya pikir pendekatan yang lebih baik adalah mengedit stub atau file konfigurasi fragmen seperti di apache conf.d, sysctl.d, sudoers.d, dll. Mencoba untuk mencari jalan melalui file konfigurasi lainnya hanya doest banding kepada saya. Dalam kasus paling sederhana, di mana file konfigurasi terfragmentasi dengan direktori .d tidak ada, gunakan sed / perl / apa pun. Jadi tidak perlu untuk augeas.
dmourati
0

Melakukan ini dengan augeasmengetik dalam Wayang adalah satu arah (seperti yang disarankan oleh @DukeLion).

Cara lain adalah dengan menggunakan augeasprovidersmodul , dengan shellvarpenyedia:

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

Ini lebih baik karena Augeas akan digunakan dengan bersih oleh penyedia Ruby. Ini juga akan mengelola penawaran dan komentar secara otomatis.

ℝaphink
sumber