Aller au contenu

Besoin De Vos Lumieres, Pour Un Script


MS_Totor

Messages recommandés

Bonjour les velus du scripting, besoin d'une vérification, par d'autres yeux, avant de lancer le truc :)

contexte: petit projet en cour, sur openvpn

But du script, garder la main sur openvpn, pouvoir le demarrer, ou l'arrêter, changer de conf. et redémarrer, le tout géré dans /opt puis au final, plus tard, si valide, transféré sur clé USB (@fred ;) )

a-1) lors de l'exécution START, contrôle et préparation

  1. effectuer des vérifications de chemins, en cas de chemins incohérent, vérification du bit x du deamon, sinon, exit
  2. chemins validés ok
  3. ip_forward activé
  4. vérifier ou créer si inexistant le node tun dans /dev/net
  5. vérifier si module tun.ko est chargé ou le charger via insmod
a-2) lancer le deamon avec des arguments pointant sur

  1. le répertoire ou est le deamon
  2. le répertoire ou sera écris le PID
  3. la configuration à utiliser automatiquement si il y a un fichier .conf présent
  4. le chemin des log
  5. retour d'info, "done"

b-1) lors de l'exécution STOP

  1. via l'argument PIDFILE, trouve le PID openvpn, et kill openvpn.pid
  2. rm du pid crée
  3. retour d'info, "done"

c-1) fonction restart

si je change de conf dans /opt/etc/openvpn/

exemple de version1.conf à version2.conf, la configuration sera chargée par l'argument

CONF=/opt/etc/openvpn/*.conf au redemarrage

voici le script qui se mange avec :rolleyes:


#!/bin/sh

DAEMON=/opt/sbin/openvpn

CONF=/opt/etc/openvpn/*.conf 

CONFIG_DIR=/opt/etc/openvpn

DAEMONARG="--daemon openvpn" 

PIDFILE=/opt/var/run/openvpn.pid


test -x $DAEMON || exit 0 

test -d $CONFIG_DIR || exit 0


case "$1" in 

start)

 echo 1 > /proc/sys/net/ipv4/ip_forward

 if ( [ ! -c /dev/net/tun ] ) then

 if ( [ ! -d /dev/net ] ) then

 mkdir -m 755 /dev/net

 mknod /dev/net/tun c 10 200

 fi

 fi

 if ( !(lsmod | grep -q "^tun") ); then

 insmod /opt/lib/modules/tun.ko

 fi

 echo -n "Starting openvpn : " 

 $DAEMON --writepid $PIDFILE --config $CONF $DAEMONARG \ 

 --log-append /opt/var/log/openvpn.log \

 --cd $CONFIG_DIR 

 echo "Done." 

;;


stop) 

 echo -n "Stopping openvpn : "

 PID=`cat $PIDFILE`

 kill $PID 

 rm $PIDFILE

 echo "Done." 

;; 


restart) 

 echo "Restarting openvpn : "

 echo ""

 sh $0 stop

 sh $0 start

 echo "" echo "Openvpn has restarted."

;;


*) 

 echo "Usage: $0 {start|stop|restart}" >&2 

 exit 1 

 ;; 

esac 


exit 0


si vous avez des commentaires pour m'aider à améliorer le truc, ou relevez une coquille, ou une séquence non logique entres mes souhaits et le script merci bien, je n'attends que cela :)

PS: si je souhaite empêcher de lancer le deamon sans fichier *.conf en ajoutant un contrôle

que doit je mettre pour que le test vérifie qu'il y a bien un fichier .conf présent sinon exit 0

CONF=/opt/etc/openvpn/*.conf

du genre

if ( find $CONF -name *.conf = o alors exit 0

si c'est pour critiquer sans apporter mieux, ou me demander une date ou tout autre renseignement, non merci passez votre chemin :P

Lien vers le commentaire
Partager sur d’autres sites

PS: si je souhaite empêcher de lancer le deamon sans fichier *.conf en ajoutant un contrôle

que doit je mettre pour que le test vérifie qu'il y a bien un fichier .conf présent sinon exit 0

CONF=/opt/etc/openvpn/*.conf

du genre

if ( find $CONF -name *.conf = o alors exit 0

Bonsoir,

Ce n'est pas trop mon style d'écriture, mais sa doit etre bon :)

Pour ta demande tu peux ajouter la ligne suivante :


[ "`/bin/ls $CONF 2> /dev/null`" = "" ] && exit 0

Mais il y a mille et une façon de faire ce genre de test........

A+

Fred ni velu, ni barbu....

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Ce n'est pas trop mon style d'écriture, mais sa doit etre bon :)

Pour ta demande tu peux ajouter la ligne suivante :


[ "`/bin/ls $CONF 2> /dev/null`" = "" ] && exit 0
Mais il y a mille et une façon de faire ce genre de test........ A+ Fred ni velu, ni barbu....
[ -f $CONF ] && exit 1

en général, 0 = pas d'erreur

Pour le reste, pas le temps de regarder aujourd'hui.

en bash, on a, entre autres :

-d fichier Vrai si le fichier existe et est un répertoire

-e fichier Vrai si le fichier existe.

-f fichier Vrai si le fichier existe et est un fichier régulier.

à vérifier si c'est ok avec ash

plutôt que insmod, utilise modprobe. Pas obligé de tester si le module est chargé.

normalement un simple modprobe tun devrait suffire.

En toute rigueur, tu devrais restituer la conf de ip_forward à l'arrêt, donc au start : tu sauvegarde l'état, et tu le restitue à la sortie (un simple cat suffit). Idem pour le module (modprobe -r tun)

Lien vers le commentaire
Partager sur d’autres sites

merci beaucoup à tous les deux ;)

je prends des notes

Mon souhait est que de toutes les façons, il n'y ai qu'un seul fichier de conf, pour eviter de lancer deux serveurs,

deux conf et brider l'utilisateur à ce niveau là, un seul daemon à moins de by passer le script bien sur.

il y a moyen d'empêcher le lancement, si ces conditions ne sont pas réunies, et tant que tout ne sera pas correct, niet pas d'openvpn, ceci dans un but éducatif ;)

-pas de fichier de conf exit 1 then echo "aucune configuration serveur"

-plus de un fichier de conf exit 2 then echo "erreur un seul fichier de configuration autorisé"

-un fichier de conf exit 0 then echo "configuration ok"

Correction de coquille



start)

-- echo 1 > /proc/sys/net/ipv4/ip_forward

 ---- if ( [ ! -c /dev/net/tun ] ) then

-------- if ( [ ! -d /dev/net ] ) then

------------mkdir -m 755 /dev/net else

------------mknod /dev/net/tun c 10 200

---------fi

-----fi

Lien vers le commentaire
Partager sur d’autres sites

On doit faire le contraire

[ -f $CONF ] || exit 1
oui. ou [ ! -f $CONF ] && exit 1 (j'ai un doigt qui a bugué)
Mais cette syntaxe génère une erreur sur le SYNO s'il y a plusieurs fichiers, et de ce fait, ne fonctionne pas.

ni sur le syno ni sur un autre linux ! Je n'avais pas capté qu'il y avait plusieurs fichiers de conf.

Sinon on pourrait faire

for fichierdeconf in $CONF; do [ ! -f $fichierdeconf ] && exit 1; done

ce qui est moins compact mais évite de lancer un sous-shell

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.