IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

script pour incrémenter le serial DNS


Sujet :

Administration système

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut script pour incrémenter le serial DNS
    salut à tous !

    je me pose une question que certain(e)s ont peut être déjà résolu :

    en effet, quand je rajoute via un script une ligne dans mon fichier de zone DNS, il faut penser à incrémenter le serial, hors je ne vois pas comment faire.

    Avec quelques commandes j'arrive à extraire le serial, mais de là à pouvoir le comparer avec la date du jour et incrémenter (de +1) si c'est la même date, et si c'est pas la même date, d'incrémenter à la date du jour avec 00


    voilà ma principale commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep 'serial' /etc/bind/fichier_zone  | awk '{print $1}' | cut -c1-8
    je coupe entre les colonnes 1 & 8 car le serial ne m’intéresse pas

    la commande de la date du jour :

    donc si les deux chiffres correspondent, il faut donc faire un +01 sur le serial du fichier_zone, et donc remplacer le serial par le nouveau

    si les deux dates diffère alors il faudra mettre la date du jour avec 00 à la fin

    merci à ceux (ou celles) qui pourront m'aider.

  2. #2
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    L'idée c'est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     awk '/Serial/{ if ( strftime("%Y%m%d",systime() ) == substr($1,"0","8" ) )   { $1=$1+1  } else $1=strftime("%Y%m%d",systime() )"00"  ; print $1 }'  FICHIER

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Elle ressemble à quoi la sortie de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep 'serial' /etc/bind/fichier_zone 
    ?

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    la commande renvoie la date du serial que j'ai mise à un moment donné.

    Là dans mon fichier de zone, j'ai mis la date d'aujourd'hui, c'est à dire :

    20110505

    année-mois-jour(yyyymmddnn)

    car j'ai pris que les colonnes 1 à 8

    si je précise pas les colonnes ça renvoie :

    2011050501

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Ok, de toute façon la réponse de becket devrait largement faire ton affaire

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    n'étant pas un fou du script, j'ai testé sa réponse vite fait,

    j'ai une erreur sur le "strftime"

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    T'as changé la casse de "Serial" pour ton test ?

    Ma question précédente te demandant à quoi ressemblait la sortie de la commande n'était pas innocente

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    root@ns1:~# awk '/serial/{ if ( strftime("%Y%m%d",systime() ) == substr($1,"0","8" ) )   { $1=$1+1  } else $1=strftime("%Y%m%d",systime() )"00"  ; print $1 }'  /etc/bind/db.srsi.fr
     
     
    awk: line 2: function strftime never defined
    awk: line 2: function systime never defined
    awk: line 2: function strftime never defined
    awk: line 2: function systime never defined

  9. #9
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Pour utiliser strftime, tu dois utiliser la version gnu de awk.

    Sinon, tu peux également faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk 'BEGIN{ "date +%Y%m%d" | getline DDJ } /Serial/{ if ( DDJ  == substr($1,"0","8" ) )   { $1=$1+1  } else $1=DDJ"00"  ; print $1 }' FICHIER

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    ah niquel merci pour l'astuce j'ai donc installé gawk (je suis sous lenny)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root@ns1:~# awk '/serial/{ if ( strftime("%Y%m%d",systime() ) == substr($1,"0","8" ) )   { $1=$1+1  } else $1=strftime("%Y%m%d",systime() )"00"  ; print $1 }'  /etc/bind/db.srsi.fr
    2011050502

    mais là ça me renvoie que le serial incrémenté, faut que je trouve le truc pour écrire à la place sur la ligne 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ORIGIN .
    $TTL 604800	; 1 week
    srsi.fr			IN SOA	ns1.srsi.fr. admin.srsi.fr. (
    				2011050501 ; serial

    merci en tout cas :p (la commande est assez énorme )

  11. #11
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Hello,

    Tu peux utiliser ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ?  ser : $1+1)}1'
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $ cat domain.zone
    $ORIGIN domain.com.
    $TTL 86400
    @     IN     SOA    ks00001.kimsufi.com.     hostmaster (
                        2011011801 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expires after 1 week
                        86400 )    ; minimum TTL of 1 day
     
          IN     NS     ns.kimsufi.com.
    ...
    $ awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ?  ser : $1+1)}1' domain.zone | tee domain2.zone
    $ORIGIN domain.com.
    $TTL 86400
    @     IN     SOA    ks00001.kimsufi.com.     hostmaster (
                        2011050600 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expires after 1 week
                        86400 )    ; minimum TTL of 1 day
     
          IN     NS     ns.kimsufi.com.
    ...
    $ awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ?  ser : $1+1)}1' domain2.zone
    $ORIGIN domain.com.
    $TTL 86400
    @     IN     SOA    ks00001.kimsufi.com.     hostmaster (
                        2011050601 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expires after 1 week
                        86400 )    ; minimum TTL of 1 day
     
          IN     NS     ns.kimsufi.com.
    ...

  12. #12
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    ah tu rajoutes la commande dans le fichier de conf direct ?

  13. #13
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    ?? Euh non

    Les lignes qui commencent par "$" signifie que je tape une commande dans mon shell (c'est pour te donner un exemple complet). J'avoue, il y a d'autres lignes qui commencent par $ dans le fichier de zone, ça peut porter à confusion :p

    Ci-dessous, je tape cat domain.zone, ça m'affiche le fichier (pour te montrer ce que j'ai dans mon fichier).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat domain.zone
    $ORIGIN domain.com.
    $TTL 86400
    @     IN     SOA    ks00001.kimsufi.com.     hostmaster (
                        2011011801 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expires after 1 week
                        86400 )    ; minimum TTL of 1 day
    
          IN     NS     ns.kimsufi.com.
    ...
    Puis je tape awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ? ser : $1+1)}1' domain.zone | tee domain2.zone pour faire la transformation du fichier domain.zone vers domain2.zone (en affichant aussi sur stdout pour l'exemple).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ?  ser : $1+1)}1' domain.zone | tee domain2.zone
    $ORIGIN domain.com.
    $TTL 86400
    @     IN     SOA    ks00001.kimsufi.com.     hostmaster (
                        2011050600 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expires after 1 week
                        86400 )    ; minimum TTL of 1 day
    
          IN     NS     ns.kimsufi.com.
    ...
    Enfin, je refais la même commande sur domain2.zone pour montrer que ça va incrémenter correctement awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ? ser : $1+1)}1' domain2.zone...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ?  ser : $1+1)}1' domain2.zone
    $ORIGIN domain.com.
    $TTL 86400
    @     IN     SOA    ks00001.kimsufi.com.     hostmaster (
                        2011050601 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expires after 1 week
                        86400 )    ; minimum TTL of 1 day
    
          IN     NS     ns.kimsufi.com.
    ...

  14. #14
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    ah ok ^^ (wai les $ m'avait porté à confusion ^^)

    bon je test ça quand je relance mon NS ^^

  15. #15
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    bon bah niquel, problème résolu, merci à toi

    cat /etc/bind/db.srsi.fr
    awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ? ser : $1+1)}1' "/etc/bind/db.srsi.fr" | tee "/etc/bind/db.srsi.fr2"

    mv /etc/bind/db.srsi.fr2 /etc/bind/db.srsi.fr

    /etc/init.d/bind9 restart
    en espérant que ça aide certain(e)s

  16. #16
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Je ne sais pas si tu le sais, mais tu n'es pas obligé d'utiliser tee :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ? ser : $1+1)}1' "/etc/bind/db.srsi.fr" > "/etc/bind/db.srsi.fr2"
     
    mv /etc/bind/db.srsi.fr2 /etc/bind/db.srsi.fr
     
    /etc/init.d/bind9 restart
    Si tu veux éviter d'utiliser un fichier temporaire, tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    { rm "/etc/bind/db.srsi.fr" && awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ? ser : $1+1)}1' > "/etc/bind/db.srsi.fr"; } < "/etc/bind/db.srsi.fr"
     
    /etc/init.d/bind9 restart

  17. #17
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    oui, c'est mignon le tee

    le coup du fichier temporaire je suis pas obligé aussi, je pourrais épurer, et je je le ferais ^^ (moi quand ça marche, je m’intéresse bien après à l'optimisation :p)

  18. #18
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Alek-C Voir le message
    Si tu veux éviter d'utiliser un fichier temporaire, tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    { rm "/etc/bind/db.srsi.fr" && awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ? ser : $1+1)}1' > "/etc/bind/db.srsi.fr"; } < "/etc/bind/db.srsi.fr"
     
    /etc/init.d/bind9 restart
    Mais c'est qu'il va nous la placer partout sa trouvaille

    Trêve de plaisanterie, merci pour le truc

  19. #19
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    lol, j'y peux rien si ça colle bien aussi ici ;o)

    maintenant, si on m'assure que c'est useless et que la redirection dans awk est très bien gérée, ça m'arrange !

  20. #20
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    la première solution marche très bien hein

    je suis étonné qu'il n'existe pas de trucs automatique justement pour le coup du serial du DNS car ça doit être un problème pour bon nombre d'entre nous -_-'

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Incrémentation du serial du fichier de config de zone DNS?
    Par flyingman dans le forum Administration système
    Réponses: 2
    Dernier message: 20/11/2012, 15h49
  2. [2005] Script VB.NET pour incrémentation de variable
    Par gentelmand dans le forum SSIS
    Réponses: 6
    Dernier message: 12/06/2012, 17h39
  3. Réponses: 3
    Dernier message: 10/02/2012, 12h40
  4. Script pour modifier des entrées DNS d'une carte réseau
    Par arnaudperfect dans le forum VBScript
    Réponses: 0
    Dernier message: 15/12/2010, 15h59
  5. Script pour incrémenter des valeurs
    Par php_de_travers dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 11/05/2009, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo