Je dois régulièrement mettre à jour les miroirs de mon dépôt. Dans la majorité des cas j'utilise la commande rsync au dessus de ssh.

Dans le cas de mon hébergeur principal secondaire (Free.fr, pour le moment) je suis malheureusement obligé d'utiliser un client ftp.

Après avoir essayé plusieurs outils disponibles, j'ai décidé d'écrire mon propre petit script de synchronisation (développer me manque quelque fois...).

Il est conçu pour mettre à jour un dépôt et rien d'autre :-)

Fonctionnement

  • il contrôle que le répertoire local contient un dossier repodata
  • il établi la liste des RPM locaux
  • il se connecte sur le serveur FTP
  • il vérifie l'existence du dossier indiqué
  • il établie la liste des RPM distant
  • il envoie les nouveaux RPM (absent du distant)
  • il supprime les anciens (absent du local)
  • il crée, si besoin le repodata distant
  • il envoi le contenu du dossier repodata si des modifications ont été détectées
  • il synchronize le contenu du dossier headers si présent (EL4)

Nouveautés

  • ajout d'une option --force permettant de forcer l'envoi d'un RPM, pratique lors d'un problème de communication lors d'une première synchronisation.
  • envoi des méta-données après l'envoi des nouveaux et avant la suppression des anciens, ce qui garanti une meilleure cohérence du dépôt pendant la synchronisation.

Utilisation

$ ftpreposync --help
ftpreposync version 0.7
Usage: ftpreposync [-vrqwlfdc] <-usp>

-c --check Check only, no action
-d --debug Very-verbose output
-f --force (optional)values Force sending (resend after error)
-l --local (optional)value Local directory (.)
-w --passive Passive mode
-p --password=<value> Password for user on server
-q --quiet Minimal output
-r --remote (optional)value Remote directory (/)
-s --server=<value> FTP server name
-u --user=<value> User login on server
-v --verbose Verbose output
server is required

Exemple :

ftpreposync -s ftp.free.fr -u compte -p secret -l fc6.x86_64 -r /rpms/fc6.x86_64 -v

Consultation : ftpreposync.phps

Téléchargement : ftpreposync.php

Vous remarquerez, au passage, l'utilisation de l'extension Console_Getargs (php-pear-console-getargs-1.3.3-1) pour l'analyse des options passées au script.

Il ne s'agit que d'une version béta, et comme toujours, vos commentaires sont les bienvenus.