Comment graver des CDs sous linux avec samba

But

J’ai été obligé de mettre en place cette solution, à cause d’un collègue que je croyais mon ami qui préconise aux clients des sauvegardes sur CD plutôt que sur bande. Perso moi je préfère les bandes c’est moins reloud pour l’admin. En plus ce traître fait du kite en barbu à SF.

Réaliser les étapes suivantes (Si c’est pas une debian et/ou perl n’est pas installe je m’en tape !) :

apt-get install fam libfam-dev cdrecord mkisofs
perl -MCPAN -e 'install SGI::FAM'

Si tu sais te servir de ton clavier tu devrais y arriver.

Placer ce script ou vous voulez genre dans /dev/burne.ple ensuite faire :

echo  7:23:respawn:/dev/burne.pl >> /etc/inittab
killall -HUP init

Procédure a expliquer aux abrutis

C’est la partie la plus compliquée de ce concept la pédagogie...

il faut créer un partage samba qui s’appelle ‘graveur’ et attention c’est important qui soit connecté sur G:, sinon l’abruti il (ou elle le plus souvent) à du mal. Ce partage contient trois dossiers :

  1. control
  2. data
  3. iso

Explication

  • iso : C’est un répertoire super dangereux faut surtout pas aller dedans sinon ça fait foirer les CD.
  • data : C’est la qu’il faut copier toutes les données pour qu’elles soit sur le CD.
  • control : C’est un répertoire magique avec des fichiers qui disparaissent et apparaissent tous seuls.

Procédure

  1. Copier les données dans data.
  2. Pendant que ça copie mettre un cd dans le serveur (important : ne mettre qu’un lecteur de cd sur le serveur).
  3. Un fois que ça a fini de copier passez a l’étape suivante.
  4. Allez dans le répertoire magique ‘control‘.
  5. Clicker droit ⇒ Nouveau ⇒ Nouveau document texte
  6. Un nouveau document texte va apparaître (Attention !!! moment tendu):
    • si le document s’appelle ‘Nouveau document’ ⇒ le renommer en ‘start’
    • si le document s’appelle ‘Nouveau document.txt’ ⇒ le renommer en ‘start.txt’
  7. Appuyer sur F5
  8. Le fichier start ou start.txt a disparu (Oh !!!)
  9. Le fichier log ou log.txt est apparu... (Ahhh !!!)
  10. Attendre 20 minutes
    • si le fichier cd_error ou cd_error.txt apparaît une erreur est survenu les causes possibles sont :
      • ⇒ Vous avez oublier l’etape 2
      • ⇒ Vous avez mis trop de données dans l’étape 1
      • ⇒ Vous êtes un naze sur internet.
    • si le fichier cd_ok ou cd_oki.txt apparaît ⇒ passez a l’étape suivante.
  11. Allez chercher votre CD... normalement le tiroir est ouvert.
  12. Vérifier vos données sur le CD si pas oki recommencer indéfiniment depuis l’étape 2
  13. Effacer les données dans data.

Courrier du coeur

Voici le genre d’abruti a qui vous pouvez avoir a faire :

Je comprends pas môssieur, le fichier start a disparu, alors je l'ai recrée
tout de suite, mais il a encore disparu, alors je l'ai encore recréé, et pis
a partir de la la machine répondait plus, et je me demande si la gravure va
bien fonctionner ?

---------------------------
Rolphin Antoine 
INFO/MCP/CLS
Poste Agence 
tél : (01 94 2)6 43 73
antoine.rolphin@socsen.com

Code

#!/usr/bin/perl -w
 
my $h = {
	 control => '/mnt/exports/graveur/control',
	 data => '/mnt/exports/graveur/data',
	 iso => '/mnt/exports/graveur/iso/image.iso',
	 cdrecord => '/usr/bin/cdrecord',
	 mkisofs => '/usr/bin/mkisofs',
};
 
$h->{log} = $h->{control}."/log.txt";
$h->{OK} = $h->{control}."/cd_ok.txt";
$h->{NOK} = $h->{control}."/cd_error.txt";
$h->{start} = "start.txt";
 
sub do_burn {
 my $start = "$h->{control}/$h->{start}";
 return unless -f $start;
 unlink $h->{log};
 close STDERR;
 open STDERR, ">$h->{log}";
 close STDOUT;
 open STDOUT, ">$h->{log}";
 
 unlink $start;
 unlink $h->{OK};
 unlink $h->{NOK};
 unlink $h->{iso};
 my @args = ($h->{mkisofs},
	     '-o', $h->{iso} , qw(-J -input-charset ISO8859-15),
	    $h->{data});
 if (system(@args)) {
  warn "system @args failed: $?";
   if (system('touch', $h->{NOK} )) {
    warn "system @args failed: $?";
   }
 } else {
  my @args = ($h->{cdrecord},
	      qw(-dummy -eject -dao -gracetime 0),
	    $h->{iso});
  if (system(@args)) {
   warn "system @args failed: $?";
   if (system('touch', $h->{NOK} )) {
    warn "system @args failed: $?";
   }
  } else {
   if (system('touch', $h->{OK} )) {
    warn "system @args failed: $?";
   }
  }
 }
 unlink $start;
}
 
use SGI::FAM;
my $fam=new SGI::FAM;
unlink $h->{log};
$fam->monitor($h->{control});
while (1) {
    my $event=$fam->next_event; # Blocks
    do_burn if ($event->filename =~ /$h->{start}/i);
}

Précisions Techniques

Pour que ça marche il y a un certain nombre de pre requis techniques...

  • cdrecord
  • Il faut le modules ide-scsi
  • Évitez de graver les cd trop rapidement, si c’est pour des archives en 4x c’est déjà bcp trop.
  • Il faut retirer l’option -dummy dans le script burne.pl. Je l’ai laissé par défaut pour éviter de foirer des cd pour des conneries.

Il manquera probablement quelques petits trucs techniques pour que ça marche.

 
tech/samba_cdrecord.txt · Dernière modification: 2006/08/26 11:48 par danjer
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Driven by DokuWiki Powered by Lescampeurs