Pagina 1 di 1

creare servizi dentro /etc/rc.d

Inviato: gio 8 gen 2009, 21:42
da tarini
salve ragazzi,
vorrei creare un servizio dedicato a ddclient (il famoso programmino per aggiornare dns dinamici) in modo da renderlo attivo all'avvio della macchina e inoltre permettere di "controllarlo" tramite i comodi comandi "start", "stop", "reload"...

i servizi sono contenuti dentro la directory /etc/rc.d

basta inserire un file eseguibile all'interno di questa directory per renderlo "attivo" all'avvio o è necessario altro?

ho inoltre visto che esiste un rc.local con lo scopo apposito di inserire chiamate personalizzate a comandi... dovrei utilizzarlo in qualche modo? qualè il miglior modo di procedere?

tnx

Re: creare servizi dentro /etc/rc.d

Inviato: gio 8 gen 2009, 22:42
da Mario Vanoni
tarini ha scritto:salve ragazzi,
vorrei creare un servizio dedicato a ddclient (il famoso programmino per aggiornare dns dinamici) in modo da renderlo attivo all'avvio della macchina e inoltre permettere di "controllarlo" tramite i comodi comandi "start", "stop", "reload"...

i servizi sono contenuti dentro la directory /etc/rc.d

basta inserire un file eseguibile all'interno di questa directory per renderlo "attivo" all'avvio o è necessario altro?

ho inoltre visto che esiste un rc.local con lo scopo apposito di inserire chiamate personalizzate a comandi... dovrei utilizzarlo in qualche modo? qualè il miglior modo di procedere?

tnx
- fai un eseguibile rc.mio_eseguibile
- devi citarlo/eseguirlo in rc.S e/o rc.M

oppure

- lo metti/scrivi in rc.local

Re: creare servizi dentro /etc/rc.d

Inviato: ven 9 gen 2009, 15:14
da tarini
perfetto...
ma se volessi mettere un servizio di questi dentro un pacchetto?

Re: creare servizi dentro /etc/rc.d

Inviato: ven 9 gen 2009, 15:47
da Mario Vanoni
tarini ha scritto:perfetto...
ma se volessi mettere un servizio di questi dentro un pacchetto?
Non capisco quello che intendi dire ...

... un servizio di questi ???

... mettere dove ???

Re: creare servizi dentro /etc/rc.d

Inviato: ven 9 gen 2009, 16:34
da targzeta
Quello che vuoi è creare il pacchetto di ddclient ed inserirci lo script in /etc/rc.d in modo che all'installazione del pacchetti sia già presente il file /etc/rc.d/rc.ddclient, ad esempio?

Spina

Re: creare servizi dentro /etc/rc.d

Inviato: ven 9 gen 2009, 16:40
da tarini
è esattamente come ha detto spina...

vorrei creare il pacchetto ddclient che oltre al binario (/bin/ddclient), alla configurazione (/etc/ddclient/ddclient.conf), alla directory di cache (/var/cache/ddclient) e eventuale documentazione
inserisca dentro /etc/rc.d lo script di avvio|interruzione

però vorrei (poi non so se è l'approccio giusto) renderlo automatico all'avvio (quindi non basta piazzarlo dentro /etc/rc.d)

Re: creare servizi dentro /etc/rc.d

Inviato: ven 9 gen 2009, 16:54
da targzeta
Devi
  • inserire nel pacchetto lo script (non eseguibile) chiamandolo "rc.ddclient.new"
  • devi creare il doinst.sh inserendoci

    Codice: Seleziona tutto

    config() {
      NEW="$1"
      OLD="$(dirname $NEW)/$(basename $NEW .new)"
      # If there's no config file by that name, mv it over:
      if [ ! -r $OLD ]; then
        mv $NEW $OLD
      elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
        # toss the redundant copy
        rm $NEW
      fi
      # Otherwise, we leave the .new copy for the admin to consider...
    }
    
    config etc/rc.d/rc.ddclient.new
e questa è la forma classica usata per inserire file rc nel pacchetto. Se però vuoi anche renderlo attivo all'avvio della macchina devi inserire, sempre nel doinst.sh una cosa del genere

Codice: Seleziona tutto

if ! grep rc.ddclient etc/rc.d/rc.local >& /dev/null; then
  cat >> etc/rc.d/rc.local << EOF
if [ -x /etc/rc.d/rc.ddclient ]; then
  sh /etc/rc.d/rc.ddclient start;
fi
EOF
fi
Ma generalmente non si fa!

In questo modo all'installazione del pacchetto, se non c'era nessuna direttiva nel file rc.local che invocasse rc.ddclient, verrà inserita automaticamente.

Spina

Re: creare servizi dentro /etc/rc.d

Inviato: ven 9 gen 2009, 22:50
da tarini
spina ha scritto:devi creare il doinst.sh inserendoci

Codice: Seleziona tutto

config() {
  NEW="$1"
  OLD="$(dirname $NEW)/$(basename $NEW .new)"
  # If there's no config file by that name, mv it over:
  if [ ! -r $OLD ]; then
    mv $NEW $OLD
  elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
    # toss the redundant copy
    rm $NEW
  fi
  # Otherwise, we leave the .new copy for the admin to consider...
}

config etc/rc.d/rc.ddclient.new

che è lo stesso approccio usato per non sovrascrivere eventuali file di configurazione... ottimo sto iniziando a capire :D

grazie