Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2011, 17h55   #1
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
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 :
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.
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2011, 18h53   #2
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
L'idée c'est de faire :
Code :
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
becket est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/05/2011, 18h53   #3
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Elle ressemble à quoi la sortie de :

Code :
egrep 'serial' /etc/bind/fichier_zone 
?
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/05/2011, 19h01   #4
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
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
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/05/2011, 19h09   #5
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Ok, de toute façon la réponse de becket devrait largement faire ton affaire
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2011, 19h22   #6
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
n'étant pas un fou du script, j'ai testé sa réponse vite fait,

j'ai une erreur sur le "strftime"
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/05/2011, 19h30   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
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
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2011, 19h35   #8
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
Code :
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
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2011, 19h46   #9
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Pour utiliser strftime, tu dois utiliser la version gnu de awk.

Sinon, tu peux également faire :

Code :
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
becket est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 05/05/2011, 19h58   #10
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
ah niquel merci pour l'astuce j'ai donc installé gawk (je suis sous lenny)

Code :
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 :
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 )
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 10h08   #11
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Hello,

Tu peux utiliser ceci par exemple :

Code :
awk 'BEGIN{ser=strftime("%Y%m%d",systime() )*100} /serial/{sub($1,$1 < ser ?  ser : $1+1)}1'
Exemple :
Code :
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.
...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 10h57   #12
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
ah tu rajoutes la commande dans le fichier de conf direct ?
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 11h41   #13
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
?? 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 :
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 :
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 :
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.
...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 11h46   #14
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
ah ok ^^ (wai les $ m'avait porté à confusion ^^)

bon je test ça quand je relance mon NS ^^
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h00   #15
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
bon bah niquel, problème résolu, merci à toi

Citation:
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
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h21   #16
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Je ne sais pas si tu le sais, mais tu n'es pas obligé d'utiliser tee :
Code :
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 :
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
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h43   #17
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
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)
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h45   #18
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par Alek-C Voir le message
Si tu veux éviter d'utiliser un fichier temporaire, tu peux faire comme ça :

Code :
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
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 15h10   #19
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
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 !
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 15h11   #20
Futur Membre du Club
 
Pierre-Antoine Errard
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Pierre-Antoine Errard

Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 19
Points : 19
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 -_-'
tetzispa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h56.


 
 
 
 
Partenaires

Hébergement Web