Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 14-01-2014 08:43:41

anguille_sous_roche
Membre
Lieu : Paris
Distrib. : Stretch
Noyau : Linux 4.6.0-1-amd64
(G)UI : Xfce 4.12
Inscription : 16-02-2013

Modification d'un script d'initialisation /etc/init.d/

Bonjour,
J’essaie de modifier le script d'initialitation d'un daemon pour qu'il utilise un fichier de configuration dans /etc/default.
Le daemon en question est dnscrypt.

voici le script d'initialisation que j'utilise habituellement :

#!/bin/sh

### BEGIN INIT INFO
# Provides:          dnscrypt
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: DNSCrypt for OpenDNS
# Description:       Launch the dnscrypt to communicate with OpenDNS
### END INIT INFO
DAEMON="/usr/sbin/dnscrypt-proxy"
NAME="dnscrypt"

### This is the home dir of user "dnscrypt"
### dnscrypt-proxy will chroot there for security reasons
mkdir -p /run/dnscrypt

dnscrypt_start()
{
    echo "Starting dnscrypt"
    /usr/sbin/dnscrypt-proxy --user=dnscrypt --daemonize
}

dnscrypt_stop()
{
    echo "Stopping dnscrypt"
    start-stop-daemon --oknodo --stop --quiet --retry=0/3/KILL/3 --exec "$DAEMON" > /dev/null
}

case "$1" in
    start)
   dnscrypt_start
   ;;
  stop)
   dnscrypt_stop
  ;;
  restart|force-reload)
   dnscrypt_stop
  dnscrypt_start
   ;;
    *)
   echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
   exit 1
   ;;
esac

exit 0



Maintenant voici le script modifier pour utiliser le fichier de configuration dans /etc/default:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          dnscrypt
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: DNSCrypt for OpenDNS
# Description:       Launch the dnscrypt to communicate with OpenDNS
### END INIT INFO
DAEMON="/usr/sbin/dnscrypt-proxy"
NAME="dnscrypt"
conffile="/etc/default/dnscrypt-proxy"

### This is the home dir of user "dnscrypt"
### dnscrypt-proxy will chroot there for security reasons
mkdir -p /run/dnscrypt

if test -r "$conffile"; then
    params="$(grep -v '^#' $conffile | cut -d '#' -f 1)"
    for parameter in $params; do
        test -n "$parameter" && options="$options --$parameter"
    done
fi

dnscrypt_start()
{
    echo "Starting dnscrypt"
    /usr/sbin/dnscrypt-proxy --user=dnscrypt --daemonize  $options
}

dnscrypt_stop()
{
    echo "Stopping dnscrypt"
    start-stop-daemon --oknodo --stop --quiet --retry=0/3/KILL/3 --exec "$DAEMON" > /dev/null
}

case "$1" in
    start)
   dnscrypt_start
   ;;
  stop)
   dnscrypt_stop
  ;;
  restart|force-reload)
   dnscrypt_stop
  dnscrypt_start
   ;;
    *)
   echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
   exit 1
   ;;
esac

exit 0



Le fichier config /etc/default/dnscrypt-proxy:

# Defaults for dnscrypt-proxy upstart script
# See man 8 dnscrypt-proxy for more info on each parameter

# What local IP the daemon will listen to, with an optional port. The default port is 53.
local-address=127.0.0.1:53

# Write PID to a file.
#pidfile=/run/dnscrypt-proxy.pid

# Remote DNS(Crypt) provider settings
#resolver-address=208.67.220.220:443
#provider-name=2.dnscrypt-cert.opendns.com
#provider-key=B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79

# Transparently add an OPT pseudo-RR to outgoing queries in order to enable the EDNS0 extension mechanism.
# This feature is enabled by default, with a payload size of 1252 bytes. Any value below 512 disables it.
#edns-payload-size=1252

# The maximum number of simultaneous active requests. The default value is 250.
#max-active-requests=250

# Use TCP instead of UDP. This is slower than UDP, and this workaround should never be used
# except when bypassing a filter is actually required.
# Moreover, multiple queries over a single TCP connections aren't supported yet.
#tcp-only




Avec ce script modifié dnscrypt prend bien en compte les options situées dans /etc/default/dnscrypt-proxy .
Seulement dnscrypt est lancé deux fois, l'un par l'utilisateur dnscrypt et l'autre par root ce qui n'est pas le cas avec le premier script qui lui ne lance qu'un seul processus dnscript avec les privilèges user dnscript.

Avec le premier script:

$ ps -ef | grep dnscrypt
dnscrypt 12501     1  0 07:03 ?        00:00:00 /usr/sbin/dnscrypt-proxy --user=dnscrypt --daemonize
 




Avec le scricpt modifié:

$ ps -ef | grep dnscrypt
root     10834     1  0 04:58 ?        00:00:00 /usr/sbin/dnscrypt-proxy --user=dnscrypt --daemonize --local-address=127.0.0.1:53
dnscrypt 10835 10834  0 04:58 ?        00:00:00 /usr/sbin/dnscrypt-proxy --user=dnscrypt --daemonize --local-address=127.0.0.1:53




Quel est le(les?) problème dans mon script ?
Ou trouver de la doc un peu complète sur la manière d'écrire un script init car je n'est trouvé que ça http://www.debian.org/doc/debian-policy … iting-init  ?

Par avance merci.

Dernière modification par anguille_sous_roche (14-01-2014 08:45:47)

Hors ligne

Pied de page des forums