Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT RUBY] save-expert-0.2_beta : Sauvegarde expert !
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Tue Sep 19, 2006 11:40 pm    Post subject: [SCRIPT RUBY] save-expert-0.2_beta : Sauvegarde expert ! Reply with quote

Bonjour :D,



** Petit clin d'oeil à Loopx :wink: .


I.) Présentation



A.) Ce programme permet aux administrateurs de faire deux types de sauvegardes:


A.1) Sauvegarder rapidement tout vos fichiers et répertoires de configurations vers un serveur ftp ou juste faire un tarball de ces fichiers sur vôtre système . Tous ces fichiers et répertoires doivent être placé dans le fichier .save-expert.list .

Exemple de fichiers et répertoires à sauvegarder

Code:

/etc/X11/xorg.conf
/etc/vsftpd/
/etc/make.conf
/etc/fstab
/etc/group
/etc/exports
/etc/hosts
/etc/lilo.conf
/etc/mplayer.conf
/etc/rc.conf
/etc/resolv.conf
/etc/ssh/
/etc/dhcp/dhcpd.conf
/etc/bind/
/var/named/
/etc/openvpn/
/etc/rsyncd.conf
/usr/src/linux/.config
/boot/grub/
/etc/apache2/
/etc/firewall/
/etc/conf.d/
/usr/bin/startxgl



A.2) Faire une sauvegarde classique de l'arborescence d'un répertoire .

Ex: Vous voulez sauvegarder le répertoire /var vers vôtre ftp !
Code:
save-expert  -t  /var  --ftp

le fichier var.tar.bz2 va être créé dans le répertoire courant pour être sauver vers le ftp!
Afficher l'aide avec l'option --help .


1.) Utilisation et installation


1.a.) Copier/Coller dans vôtre éditeur ensuite rendez le exécutable :
Code:
chmod +x save-expert
...

1.b.) Mettez le dans un répertoire du PATH ,

par ex : /usr/bin :
Code:
mv save-expert  /usr/bin

sinon placez vous dans le répertoire ou se trouve le script et lancé le avec cette commande :
Code:
./save-expert

ou
Code:
ruby  save-expert


1.c.) Si vous utilisez save-expert pour sauvegarder des fichiers de configurations particuliers alors au premier lancement save-expert va créé un fichier .save-expert.list dans /root ! Vous indiquerez dans ce fichier les répertoires et fichiers que vous voulez sauvegarder ( ne mettez pas de commentaires dans ce fichier pour l'instant, de ligne vide..) aussi le script enregistrera le répertoire de sauvegarde du ftp, le nom du ftp, vôtre login ( pas le mot de passe !) dans le fichier /tmp/save-expert.info pour automatiser ces étapes .(vous effacez ce fichier pour réinitialiser le script...).


_-_ Vous pouvez utilisez le script pour faire des compressions classiques en .tar.bz2 en passant directement des options sur la ligne de commandes . Dans ce cas le fichier .save-expert.list ne serra pas créé et vous n'en aurez pas besoin !

1.d.) Consultez l'aide avec l'option --help pour tirer avantage de ce script .

Note Useful de quelques options: Éditez vôtre fichier .save-expert.list :
Code:
save-expert   -e

le fichier va être directement traité vers le ftp !

Faire un tarball d'un répertoire vers le ftp:
Code:
save-expert -t /chemin/du/répertoire  --ftp

Si vous êtes dans le même répertoire que celui que vous compressez, vous indiquez juste son nom .

Juste un tarball:
Code:
save-expert -o /chemin/du/répertoire


1.e.) Le Code


Code:

#!/usr/bin/ruby  -w



###  Distributed under the terms of the GNU General Public License v2
#
###  Save-expert comes with ABSOLUTELY NO WARRANTY  !
#
###  Utilisation: save-expert -h pour afficher l'aide complète !
#
###  Author : Man in the Hill .
#
###  Mes respect à Mr Professor X .



# == Synopsis ==
#
# Sauvegarde des fichiers importants via ftp !
#
# == Usage ==
#
# Lancer save-expert -h pour afficher l'aide complète !
#
# == End ==





require   'ftools'
require   'highline'
require   'getoptlong'
require   'net/ftp'
require   'pstore'
require   'fileutils'
include    FileUtils
include    FileTest





$version = 'save-expert-0.2_beta'
$save_expert = 'save-expert'
$tmp = '/tmp'   
$work = '/tmp/save-expert'   
$save_expert_bz2 = 'save-expert.tar.bz2'
$expert_list = '.save-expert.list'
$expert_info = '/tmp/save-expert.info'





class  Iga
   


   def   start()
            
            testfileinmyhome()
         
         if    $test_save_expert_list == true   
            emptyfile()
            compression()
            server("#{$tmp}","#{$save_expert_bz2}")
      
         elsif
            createfile("#{$home}","#{$expert_list}")
         
         else
            puts "Une erreur est survenue !"
         
         end
   end
   
   
   
   def    compression()
      
         
         check("#{$work}")
         readfile()
         
         $tab_files.each do |$file|
            
            File::copy($file, "#{$work}")
         end   
         
         # Se placer dans le répertoire de travail pour compresser ...
         Dir::chdir("#{$tmp}")
      
         # Compression ...
         puts "\nCréation du tarball #{$save_expert_bz2} ...\n"
         system("tar -cjvf #{$save_expert_bz2}  #{$save_expert}")
         rm_rf("#{$work}")
         puts "\nLe tarball #{$save_expert_bz2} se trouve dans #{$tmp} ... [ OK ]\n\n"
      
   end
   
      

   def  server(path, paquet)
      
         # ...
         puts "\nSauvegarde vers le FTP ... [ OK ]\n\n"
         
         # Tester si un répertoire par défaut existe ...
         restoreallinformations()
         
         
      
      if   $repository != nil  and $ftp_name != nil and $ftp_login != nil
         
         # Ouvrir la connexion ftp ...
         ftp = Net::FTP.new("#{$ftp_name}")
         
         # Demandez le mot de passe ...
         pass_ftp = HighLine::new()
         puts "\n*      *      *"
         pass = pass_ftp.ask("Entrez vôtre mot de passe, svp. :  \n") {
         |q|  q.echo = false }
      
         # Rentrez le login et le mot de passe ...
         puts ftp.login("#{$ftp_login}", "#{pass}")
         puts ""
      
         # Se placer dans le répertoire de sauvegarde ...
         ftp.chdir("#{$repository}")
      
         # Transférez le fichier compressé de sauvegarde "save-speed.tar.bz2" ...
         ftp.put("#{path}/#{paquet}", "#{paquet}")
      
         # Vérifiez que le fichier est bien présent ..
         puts ""
         puts ftp.list
      
         # ...
         puts "\n\nLe fichier #{paquet} est sauvegardé dans le répertoire #{$repository} ... [ OK ]\n"
      
         # Quittez le serveur
         puts "\nQuittons le serveur ... [ OK ]\n\n"
         puts "Voulez-vous effacer le tarball #{paquet} se trouvant dans #{path} ? [Y/n]\n"
         cas_efface = $stdin::gets.chomp
         
            case cas_efface.downcase
               when  "y", "yes"
               
               puts "\nEffaçons le tarball #{path}/#{paquet} ... [ OK ]\n"
               rm_rf("#{path}/#{paquet}")
               puts "\n@ Bientôt\n\n"
               ftp.quit()
               exit
               when  "n", "no", "non"
               puts "\n@ Bientôt\n\n"
               ftp.quit()
               exit
            end
      
      else
      
         #  Demandez le répertoire de sauvegarde sur le serveur ftp ...
         puts "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
         puts "Entrez le nom du /répertoire de sauvegarde sur le serveur, svp.:"
         puts "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"
         $rep = $stdin::gets.chomp
         storerepository()
         # Demandez le nom ou l'IP du serveur ...
         puts "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
         puts "Entrez le nom de vôtre serveur ftp ou son IP,svp.:"
         puts "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"
         $nom_ftp = $stdin::gets.chomp
         storeftpname()
         # Demandez le login ...
         puts "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
         puts "Entrez vôtre login ftp, svp.:"
         puts "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"
         $login = $stdin::gets.chomp
         storeftplogin()
         # Demandez le mot de passe ...
         pass_ftp = HighLine::new()
         puts "\n*      *      *"
         $pass = pass_ftp.ask("Entrez vôtre mot de passe, svp. :  \n") {
         |q|  q.echo = false }
      
   
         # Ouvrir la connexion ftp ...
         ftp = Net::FTP.new("#{$nom_ftp}")
      
         # Rentrez le login et le mot de passe ...
         puts ftp.login("#{$login}", "#{$pass}")
         puts ""
      
         # Se placer dans le répertoire de sauvegarde ...
         ftp.chdir("#{$rep}")
      
         # Transférez le fichier compressé de sauvegarde "save-speed.tar.bz2" ...
         ftp.put("#{path}/#{paquet}", "#{paquet}")
      
         # Vérifiez que le fichier est bien présent ..
         puts ""
         puts ftp.list
      
         # ...
         puts "\n\nLe fichier #{paquet} est sauvegardé dans le répertoire #{$rep} ... [ OK ]\n"
      
         # Quittez le serveur
         puts "\nQuittons le serveur ... [ OK ]\n\n"
         puts "Voulez-vous effacer le tarball #{paquet} se trouvant dans #{path} ? [Y/n]\n"
         cas_efface = $stdin::gets.chomp
         
            case cas_efface.downcase
               when  "y", "yes"
               
               puts "\nEffaçons le tarball #{path}/#{paquet} ... [ OK ]\n"
               rm_rf("#{path}/#{paquet}")
               puts "\n@ Bientôt\n\n"
               ftp.quit()
               exit
               when  "n", "no", "non"
               puts "\n@ Bientôt\n\n"
               ftp.quit()
               exit
            end
      
         end   
   end
   
   
   
   def   restoreallinformations()
   
      
      store = PStore::new("#{$expert_info}")
      $repository = nil
      store.transaction {$repository = store["memorepo"]}
   
      store = PStore::new("#{$expert_info}")
      $ftp_name = nil
      store.transaction {$ftp_name = store["memoftp"]}
   
      store = PStore::new("#{$expert_info}")
      $ftp_login = nil
      store.transaction {$ftp_login = store["memolog"]}
   
   end
   
   
   
   ######### Début du stockage des infos #########                     
   #
   #
   
   def    storeftpname()
      
      $ftp_name = "#{$nom_ftp}"
      store = PStore::new("#{$expert_info}")
      store.transaction {
            store["memoftp"] = $ftp_name}
   end
   
   
   
   
   def   storeftplogin()
      
      $ftp_login = "#{$login}"
      store = PStore::new("#{$expert_info}")
      store.transaction {
            store["memolog"] = $ftp_login}
   end
   
   
   
   
   def    storerepository()
      
      $repository = "#{$rep}"
      store = PStore::new("#{$expert_info}")
      store.transaction {
            store["memorepo"] = $repository}
   end
   
   #
   #
   ######### Fin du stockage des infos  #########                   
                            

   
   def erreur_fatal(message)
      
      # Cette fonction détermine si le fichier .save-expert.list est mal configuré ...
      p message
      puts "\nÉditer vôtre fichier correctement, svp ! Sans commentaire, sans ligne vide et avec des fichiers existant ! Merci .\n\n"
      exit
   end

   

   def    emptyfile()
      
      #  Fichier vide ?
      size = File::size("#{$home}/#{$expert_list}")
         if size == 0
            puts "\nLe fichier #{$home}/#{$expert_list} n'est pas correctement configuré !\n\n"
            exit
         end
   end



   def   readfile()
      
      # Création d'un tableau vide ...
      $tab_files = []
      
      # Ouvrir le fichier et lire chaque ligne ...
      File::readlines("#{$home}/#{$expert_list}").each do |$line|
         
         # Tester si sur chaque ligne est ecri un fichier existant ...
         $file =  File::exists?($line.strip)
   
            if     $file == true
   
               puts "#{$line.strip}  ... EXIST ... [ OK ] "
               $tab_files << ($line.strip)
         
            else
               erreur_fatal "#{$line.strip}  ... N'EXISTE PAS !"
            end
      end
      
   end


   
   def    createfile(home, file)
      
      # Création du fichier caché ".save-expert.list" ...
      FileUtils::touch("#{home}/#{file}")
         puts "\nLe fichier #{home}/#{file} a été créé !\n"
         puts "\nAfficher l'aide --help pour connaître l'usage de ce fichier et du soft !\n\n"
      exit
   end   

   

   def   testfileinmyhome()
      
      # ...
      #$home = %x!env!::grep(/^HOME/).to_s.split('=')[1].chomp
      $home = "/root"
      # Test de l'existence du fichier ".save-expert.list" ...
      $test_save_expert_list = FileTest::exist?("#{$home}/#{$expert_list}")
   
   end

   
   def    check(directory)
      
      # Tester l'existence d'un repertoire ...
      exist = FileTest::exist?("#{directory}")
         
         if    exist == true
      
            # Effacez  le répertoire existant !
            rm_rf("#{directory}")
         
         else
            # Créer un répertoire de travail ...
            Dir::mkdir("#{directory}", 0777)
         end
   end


   def   tarball(rep_for_tar)
   
      # Cette fonction compresse un répertoire passé en argument sur la ligne de commande ...
      # Tester l'existence du répertoire ...
      rep_to_tar = FileTest::exist?("#{rep_for_tar}")
                  
         if      rep_to_tar == true
            
            # Connaître la taille du répertoire   ...         
            puts size = %x!du -hs "#{rep_for_tar}"!
            
            # Récupérez la racine du répertoire ...
            $rep_root = File::dirname("#{rep_for_tar}")
            
            # Récuperez le nom du répertoire ...
            $base = File::basename("#{rep_for_tar}")
            
            # Connaître le pth courant ...
            $path_courant = Dir::pwd
            puts "\nCréation du tarball #{$base}.tar.bz2 ...\n"
            
            # Compressez en tar.bz2
            system("tar -C #{$rep_root} -cjvf #{$base}.tar.bz2 #{$base}")
            puts "\nLe tarball #{$base}.tar.bz2 est dans #{$path_courant} ... [ OK ]\n\n"
         end
   end


end                           



                           
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              #### Save-expert ####


      
      
         
         
         
         # Connaître l'uid de l'utilisateur !
         whoisit = Process::uid
      
         if    whoisit != 0
         puts "\nVous devez être le root pour utiliser ce script ! Merci !\n\n"
         exit
         end

         
         a = ARGV[0]
         b = ARGV[1]
         c = ARGV[2]
      
      
         if      a == "-t" and  b != 0 and  c == nil
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-t" and  b != 0 and c == "-o"
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-t" and b != 0 and c == "-e"
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-t" and b != 0 and c == "-c"
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-t" and b != 0 and c =="-l"
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-t" and b != 0 and c == "-h"
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-e" and  b != nil
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-l" and b != nil
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-c" and b != nil
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-o" and b != 0 and c != nil
            puts "\nVérifiez vos options ...\n\n"
            exit
         elsif
            a == "-h" and b != nil
            puts "\nVérifiez vos options ...\n\n"
            exit
         end
         
         # Création de l'objet "oboro_dono" de la classe shinobi "Iga" ...
         $oboro_dono = Iga::new()
      
         # What Time is it ?
         t= Time.now.asctime
         puts "\n#{t}\n\n"
         
         # ...
         puts "Author : Man in the Hill .(2006, Madinina).\n"
         puts "http://www.guidelinux.org\n"
         puts "\nAffichez l'aide complète avec l'option --help.\n"
         puts "\nThanks, Enjoy !\n\n"
         
          # Options ...
         opts = GetoptLong.new(
               ['--help', '-h', GetoptLong::NO_ARGUMENT  ],
               ['--expert-list-ftp', '-e', GetoptLong::NO_ARGUMENT],
               ['--list', '-l', GetoptLong::NO_ARGUMENT],
               ['--compress', '-c', GetoptLong::NO_ARGUMENT],
               ['--tarball', '-t', GetoptLong::REQUIRED_ARGUMENT],
               ['--ftp',  GetoptLong::NO_ARGUMENT],
               ['--one-tarball', '-o', GetoptLong::REQUIRED_ARGUMENT])
         
            
            opts.each do |opt, arg|
            
            
            case opt
         

               when '--help'
                  
                  puts "\n== Synopsis ==\n"
                  puts "\nPour l'administrateur qui veut sauvegardez ses fichiers importants via ftp !"
                  puts "Ce soft peut vous sauvegardez certains fichiers"
                  puts "et répertoires bien précis !"
                  puts "Lors de l'installation, un fichier "
                  puts ".save-expert.list serra crée dans /root."
                  puts "Indiquez dans ce fichiers tous les répertoires "
                  puts "et fichiers que vous souhaitez sauvegarder."
                  puts "Ce script peut aussi vous faire "
                  puts "des sauvegardes classiques en .tar.bz2 de toutes une arborescence !"
                  puts "\n== Usage ==\n"
                  puts "\n1.) Vous désirez sauvegarder des fichiers "
                  puts "et répertoires particuliers (vos fichiers de configurations , par ex !)"
                  puts"Vous devez éditer le fichier .save-expert.list,"
                  puts "avec la liste des fichiers et répertoires à sauvegarder"
                  puts "Si vous sauvegardé vers un ftp, tous les paramètres "
                  puts "que vous allez rentrer lors d'une première sauvegarde,"
                  puts "serront enregistrés (répertoire de sauvegarde sur le ftp, nom du ftp, login)"
                  puts"sauf vôtre mot de passe,"
                  puts "ainsi vous n'aurez plus à les indiquer !"
                  puts "\n2.) Vous désirez sauvegarder n'importe quel répertoire"
                  puts "avec toutes son arborescence,"
                  puts "save-expert vous permet de le faire !"
                  puts "\nEx: Vous voulez compressez un répertoire et le mettre sur un ftp:"
                  puts "save-expert -t /chemin/répertoire  --ftp"
                  puts "\nPour juste un tarball qui serra sauvez dans le répertoire courant:"
                  puts "save-expert -o /chemin/répertoire"
                  puts "\n\nsave-expert [OPTIONS]\n"
                  puts "\n--help, -h:"
                  puts "\nAffichez l'aide .\n"
                  puts "\n--expert-list-ftp, -e:\n"
                  puts "\nPermet la sauvegarde de tout ce qui est indiqué dans le fichier"
                  puts ".save-expert.list vers le ftp."
                  puts "\nEx: save-expert -e"
                  puts "\n--list, -l:"
                  puts "\nPermet de lister le fichier .save-expert.list"
                  puts "et de vérifier si les fichiers ou répertoires exist sur le système !"
                  puts "\nEx: save-expert  -l\n"
                  puts "\n--compress, -c:"
                  puts "\nPermet de faire seulement une compression des fichiers et répertoires"
                  puts "indiqués dans le fichier save-expert.list."
                  puts "Ce fichier compressé se trouvera dans /tmp"
                  puts "sous le nom de save-expert.tar.bz2\n"
                  puts "\n--tarball, -t:\n"
                  puts "\nEn relation avec la section 2.), doit être utilisé avec l'option --ftp ."
                  puts "permet de faire une sauvegarde d'une arborescence vers le ftp."
                  puts "\nEx: save-expert -t /home --ftp"
                  puts "Vôtre home va être compressé dans le répertoire courant sous le nom de home.tar.bz2 ."
                  puts "\n--ftp:\n"
                  puts "\nUtilisez uniquement avec l'option --tarball pour sauvegarder vers le ftp ."
                  puts "\n--one-tarball:\n"
                  puts "\nPermet de faire simplement un tarball dans le répertoire courant en .tar.bz2 ."
                  puts "\nEffacez le fichier save-expert.info pour réinitialiser le script ."
                  puts "\n== Vérification des dépendances ==\n"
                  puts "\nVous devez avoir ruby d'installé ..."
                  puts "Avec vôtre gestionnaire de paquets, installé rubygems "
                  puts "et tapez gem --help pour voir les commandes."
                  puts "gem s'occupe d'installer et mettre à jour vos librairies ruby"
                  puts "avec la commande gem install nom_de_la_lib."
                  puts "Pour que save-expert fonctionne, il vous faut la lib highline !"
                  puts "\ngem install highline\n\n"
                  puts "%%%%                                                               %%%\n"
                  puts "\nSi vous avez des questions, des propositions ou vous trouvez des bugs ,"
                  puts "contactez-moi via ce site http://www.guidelinux.org\n\n"
                  puts "Forum RUBY géré par Professor X :\n"
                  puts "http://www.forum.moteurprog.com/forum.php?PAGE=1&ID_Forum=21\n\n"
                  puts "Le site de référence RUBY:\n"
                  puts "http://www.ruby-lang.org/en/\n\n"
                  puts "Ce script a été écri avec Gentoo Gnu/Linux\n"
                  puts "Le forum français:\n"
                  puts "http://forums.gentoo.org/viewforum-f-35.html?sid=85dae63007dbfee5dd89d38bc63daef2\n\n"
                  puts "== Fin ==\n\n"
               exit
         
               
               when  '--one-tarball'
         
                  $one_tar = arg
                     
                     $oboro_dono::tarball("#{$one_tar}")
                     exit
                     
               
               when  '--tarball'

                  $tar = arg
               
               
               when '--expert-list-ftp'
                  
                        $oboro_dono::start()
                  
                  
               when  '--ftp'
                  
                  $tar_ftp   = $tar
                     
                     $oboro_dono::tarball("#{$tar_ftp}")
                     $oboro_dono::server("#{$path_courant}", "#{$base}.tar.bz2")
               
               
               when  '--list'
                  
                  
                        $oboro_dono::testfileinmyhome()
                     if    $test_save_expert_list == true
                        
                        $oboro_dono::emptyfile()
                        $oboro_dono::readfile()
                        $tab_files.clear
                        puts ""
                        exit
                     
                     elsif
                        
                        $oboro_dono::createfile("#{$home}", "#{$expert_list}")
                        
                     else
                        puts "Une erreur est survenue !"
                        exit
                     end
               
               
               when '--compress'
                  
                        $oboro_dono::testfileinmyhome()
                        
                     if    $test_save_expert_list == true
                        
                        $oboro_dono::emptyfile()
                        $oboro_dono::compression()
                        exit
                     elsif
         
                        $oboro_dono::createfile("#{$home}", "#{$expert_list}")
                     
                     else
                        puts "Une erreur est survenue !"
                        exit
                     end
                  
            end
      
         end
      
      
      $oboro_dono::start()
   

exit   1


1.g.) Vérification des dépendances


_-_ Vous devez avoir ruby d'installé ...
Avec vôtre gestionnaire de paquets, installé rubygems:
Code:
emerge -av rubygems

Tapez gem --help pour voir les commandes.

gem s'occupe d'installer vos librairies ruby avec la commande:
Code:
gem install nom_de_la_lib

_-_ Pour que save-expert fonctionne, il vous faut la lib highline !
Code:
gem install highline


_-_ Une introduction à gem
http://rubyfr.pro1.typhon.org/rubyfr.org/hiki.cgi?Introduction++RubyGems


1.h.) TODO


_-_ Permettre une sauvegarde sur un cd

_-_ Il y a du boulot :D





Enjoy !
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum