]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/testing/eblstodo
ebl update
[bacula/bacula] / bacula / patches / testing / eblstodo
1 Idees
2 ------
3
4 Cryptage :
5  - Pouvoir configurer les algos de cryptage
6  - Pouvoir choisir de crypter dans le fileset
7  - Pouvoir choisir de forcer le cryptage dans la definition
8    du client.
9
10 Lister les fichiers sur le client :
11  - Avoir un mode comme restore
12  - Avoir une api list files client=xxx where=yyy
13   Dans la filed/job.c:handle_client_request, ajouter une commande
14   dans struct s_cmds cmds; et si possible utiliser le code de finlib
15  - A voir, pourquoi ne pas utiliser mark/unmark comme dans une resto
16    pour construire un fileset ?
17
18 Sauvegarde des postes nomades :
19  - Le client doit pouvoir initier les sauvegardes
20  - Au niveau firewall, il ne doit y avoir que 1 connexion (1)
21                     
22                                               
23              Localhost     |                  
24                            |   +-------+ (4) +---------------+
25                            |   |       |<----|               |
26 +--------+  (5)  +-------+ |   |       |     |   DIRECTOR    |
27 |        |<------+       | |   |       |---->|               |
28 |   FD   |       | PROXY | |   | PROXY | (3) +-------+-------+
29 |        +------->       <-+--->       |             |
30 +--------+  (6)  +-^-----+ (2) |       |     +-------v-------+
31                   /-\      |   |       | (7) |               |
32                    |       |   |       +----->   STORAGE     |
33                    |       |   |       |     |               |
34   Initiate backup  |       |   +-------+     +---------------+
35      --------------+       |                          
36            (1)          Network                               
37                                                       
38                                               
39 (1) & (2) BEGIN Backup         
40 (3) Bconsole like - Run command
41 (4) & (5) DIR -> (PROX <-> PROX) -> FD connection (fileset, storage..)
42 (6) & (7) FD -> (PROX <-> PROX) -> SD
43
44  - Utilisation d'une sorte proxy https
45
46
47 Bconsole :
48  p Ajouter l'historique dans la bconsole
49  - Ajouter une commande pour bloquer un drive
50
51 Sauvegarde SAN :
52  - Avoir un SD sur chaque FD
53  - Avoir une serie de script qui :
54    * bascule le lecteur en local
55    * lance le SD
56    * le script de mtx doit faire ses demandes au director sur
57      un autochanger commun
58
59  - Tout le monde voit le lecteur, et le client doit demander la permission
60  pour despooler son bloc de XG au director.
61
62  - On fait du round robbin avec tout le monde, et on utilise un disque 
63  local pour  spooler.
64
65  - 50 clients qui spoolent en local, c'est plus rapide que vers 1 point 
66  central
67
68
69 Gestion des stats :
70  - Ajouter la gestion des stats dans le client et le sd
71    - Ajouter un M_STATS dans la gestion des messages
72    - générer un format simple UNIXSTAMP|label|unit|value
73    - possibilité d'ajouter ça dans la base de donnée ou dans rrd
74
75 API :
76
77  - apr (apache portable runtime) pour les exemples de chargement
78    de module dynamique (win32, linux, etc...)
79    http://svn.apache.org/viewvc/apr/apr/trunk/dso/
80
81  - exemple apache
82    http://modules.apache.org/doc/API.html
83
84  - comment charger les librairies dependantes d'un hook
85  ex: ACL  -> -lacl
86      GZIP -> -lgz
87
88  - nommer les hook (a la place d'une structure de pointeur)
89  ex:
90         "action", mod_action_handler
91
92  - interface
93    - opendir
94    - readdir
95    - closedir
96    - mkdir
97    - stat
98    - open
99    - close
100    - read
101    - write
102    - seek
103    - get_perm
104    - set_perm
105    - configuration... (ajout automatique avant de charger le fichier de conf)
106    - init
107    - destroy
108
109    - version
110    - name
111
112  - exemple de hook/module
113    - cryptage ?
114    - checksum (MD5/SHA1)
115    - ACL/droits
116    - compression (LZO, GZIP, BZIP)
117
118  - initialiser le jcr avec seulement les hooks utiles
119
120  - configuration 
121    - declarer les modules utiles
122    - les options doivent utiliser le nom du module
123  ex:
124       GZIP level = 2
125       ACL use uid = yes
126       etc...
127
128 TODO
129 ----
130
131 bweb :
132   - Voir les groupes d'un client
133   - Overview, pouvoir choisir entre la job_old et l'autre
134   - utiliser des noms de table plus proche (brestore -> bweb ?)
135   - Balloon
136 Btw., the vertical axis was the number of files 
137 while the size of the ballon is the volume (in MB 
138 or GB).  Those could be switched, though, depending on what looks better.
139
140 What are you using for color-coding the ballons? 
141 That could be a variety of different things like 
142 client, client group, backup level (full, 
143 incremental, etc.,) that adds context to the size 
144 and position that is already present in the chart.
145
146  x Ajouter mount,umount,release,status pour chaque device
147  - Ajouter le viewfileset dans l'interface de resto
148  x Ajouter la labelisation de bande et l'ajout de media (add et label)
149  - Ajouter la possibilité de lancer des migrations et des
150  verification. 
151  - Quand on deplace un media, il faut prendre le enabled depuis
152    la nouvelle localisation (en javascript)
153   o On ajoute une combo (Backup/Migration/Verify)
154   o On peut regarder dans l'historique des job quel est le bon type
155   o Quand on relance, on spécifie le type directement
156   o Il faut adapter le status client pour traiter les autres type
157  de job (par exemple, si c'est pas un backup/restore, pas de status dir)
158
159
160  x Ajouter une vue par groupe et par date (sur 7, 15 ou 30 jours)
161
162               lu ma me je ve sa di
163   groupe1     v  v  x  w  v  v  v             q1
164    |-- s1     v  v  v  v  v  v  v             q2
165    |-- s2     v  v  x  v  v  v  v
166    `-- s3     v  v  v  w  v  v  v
167
168 ---8<-------8<--------8<--------8<----------8<------------------
169
170 ALTER TABLE Status ADD COLUMN severity int;
171 UPDATE status SET severity = 15;
172 UPDATE status SET severity = 100 where jobstatus = 'f';
173 UPDATE status SET severity = 90 where jobstatus = 'A';
174 UPDATE status SET severity = 10 where jobstatus = 'T';
175
176 -- Affiche par groupe et date le statut des jobs (q1)
177 SELECT date_part('day', date) AS day, date, client_group_name, JobStatusLong, 
178        JobStatus, nb_job, joberrors
179 FROM (
180   SELECT date_trunc('day', job_old.StartTime) AS date, 
181          MAX(severity)  AS severity,
182          COUNT(1)       AS nb_job,
183          SUM(JobErrors) AS joberrors,
184          client_group_name
185     FROM job_old
186     JOIN client_group_member USING (ClientId)
187     JOIN client_group        USING (client_group_id)
188     JOIN Status              USING (JobStatus)
189    WHERE StartTime > '2007-10-01' AND StartTime < '2007-11-19'
190   
191    GROUP BY client_group_name, date
192 ) AS sub JOIN Status USING (severity)
193  ORDER BY client_group_name, date
194
195 -- Affiche un client_group en detail (q2)
196 SELECT date, client, JobStatusLong, JobStatus, nb_job, joberrors
197 FROM (
198   SELECT date_trunc('day', job_old.StartTime) AS date,
199          Client.Name    AS client,
200          MAX(severity)  AS severity,
201          COUNT(1)       AS nb_job,
202          SUM(JobErrors) AS joberrors
203     FROM job_old
204     JOIN client_group_member USING (ClientId)
205     JOIN client_group        USING (client_group_id)
206     JOIN Client              USING (ClientId)
207     JOIN Status              USING (JobStatus)
208    WHERE StartTime > '2007-10-01'
209      AND client_group_name = '0-SAVES_SIGMA1'
210
211    GROUP BY client, date
212 ) AS sub JOIN Status USING (severity)
213  ORDER BY client, date
214
215 ---8<-------8<--------8<--------8<----------8<------------------
216
217  - Quand on clique dessus on arrive sur la liste des jobs en question
218    Groupe -> Jobs
219    Job    -> Log
220
221  x Ajouter une variable pour remplacer NOW() dans les queries
222    origin = arg->{origin} || NOW();
223  - Ajouter des stats en %
224
225 ---8<-------8<--------8<--------8<----------8<------------------
226
227 SELECT  client_group_name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
228 FROM (
229
230      SELECT 
231        SUM(CASE WHEN JobStatus='T' THEN 1 
232                 ELSE 0 END) AS nb_ok,
233        SUM(CASE WHEN JobStatus='A' THEN 1 
234                 WHEN JobStatus='f' THEN 1
235                 WHEN JobStatus='E' THEN 1 
236                 WHEN JobStatus='e' THEN 1 
237                 ELSE 0 END) AS nb_other,
238        client_group_name
239       FROM job_old 
240       JOIN client_group_member USING (ClientId)
241       JOIN client_group        USING (client_group_id)
242
243      WHERE StartTime > '2007-10-01'
244      GROUP BY client_group_name
245 ) AS subq
246
247 SELECT  Name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
248 FROM (
249
250      SELECT 
251        SUM(CASE WHEN JobStatus='T' THEN 1 
252                 ELSE 0 END) AS nb_ok,
253        SUM(CASE WHEN JobStatus='A' THEN 1 
254                 WHEN JobStatus='f' THEN 1
255                 WHEN JobStatus='E' THEN 1 
256                 WHEN JobStatus='e' THEN 1 
257                 ELSE 0 END) AS nb_other,
258        Client.Name AS name
259       FROM job_old 
260       JOIN Client       USING (ClientId)
261
262      WHERE StartTime > '2007-10-01'
263        AND JobStatus IN ('T', 'A', 'f', 'E', 'e')
264      GROUP BY Client.Name
265 ) AS subq
266
267
268
269 ---8<-------8<--------8<--------8<----------8<------------------
270
271    Nb backup OK
272   -------------  x 100 => par groupe de client
273    Nb backup
274
275  - Il faut ajouter une estimation des jobs qui auraient
276    du se lancer (a voir avec les schedules)
277
278  - Affichage en html/csv pour des stats 
279   grp, nb client, nb backup, nb ok, nb err, nb cancel, 
280   %ok, nb files, nb gig, time
281
282  - Ajouter la liste des fichiers (quand il n'y en a pas trop)
283  - Ajouter un mode qui compte le nombre de fichier sous bfileview
284  x Ajouter un bouton suivant/precedant dans la vue des logs
285  x Ajouter la liste des medias qui vont/ont expirer et les pruner
286  x Fixer les purge/prune de multiple volumes
287  x Ajouter une gestion des utilisateurs avec des roles
288    o Liste des roles possibles
289      * view_stats
290      * configure
291      * run_job
292      * run_restore
293      * view_history
294      * view_log
295      * view_media
296      * view_pool
297      * update_media
298      * view_autochanger
299      * update_autochanger
300      * cancel_job
301
302    o Avoir des profiles ayant certains roles
303      * admin (all)
304      * customer (view_stats, view_history, view_log)
305      * production (all - configure)
306      ...
307
308    o Pour faire la difference entre les groupes de la vue et
309      les groupes d'acl, il faut ajouter un champs dans la table
310      client_group (visible bool).
311
312    o Ajout de 4 tables dans le catalogue
313        - bweb_user (userid, username, passwd, comment) passwd with apache ?
314        - bweb_role (roleid, rolename)
315        - bweb_role_member (roleid, userid)
316
317        - bweb_client_group_acl (client_group_id, userid)
318        - bweb_pool_acl (poolid, userid)
319
320  o Il faudrait aussi pouvoir choisir le login admin...
321
322  x On specifie par user si on veut filter par les groupes (gestion un peu
323    chiante, il faut ajouter les hosts dans les groupes, sinon, ils sont
324    invisibles)
325
326  x On recupere ce champs quand on check les can_do(); et apres, on le regarde
327    avant d'envoyer le JOIN de filtre. (Attention, admin n'est pas soumis a ca)
328    
329  x On peut ajouter une option dans la Config pour activer ce mode ou pas. 
330
331  x Regarder la possibilite de recuperer toutes les roles au debut pour
332    adapter les pages web... Il n'y a que les menus/actions autorises qui
333    seraient affiches. (bp cancel => role cancel_job, configuration => role configure)
334
335  * on utilise le commentaire depuis une page web, comme ca
336    on gere la traduction sans toucher a la base
337
338 CREATE TABLE bweb_user
339 (
340         userid       serial not null,
341         username     text not null,
342         use_acl      boolean default false,
343         comment      text default '',
344         passwd       text default '',
345         primary key (userid)
346 );
347 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
348
349 CREATE TABLE bweb_role
350 (
351         roleid       serial not null,
352         rolename     text not null,
353 --      comment      text default '',
354         primary key (roleid)
355 );
356 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
357
358 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
359 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
360 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
361 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
362 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
363 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
364 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
365 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
366 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
367 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
368 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
369
370 CREATE TABLE  bweb_role_member
371 (
372         roleid       integer not null,
373         userid       integer not null,
374         primary key (roleid, userid)
375 );
376
377 CREATE TABLE  bweb_client_group_acl
378 (
379         client_group_id       integer not null,
380         userid                integer not null,
381         primary key (client_group_id, userid)
382 );
383
384  - Integrer brestore en mode javascript
385    o ajouter une api 
386        .ls_dir(jobid,pathid)
387        .ls_file(jobid,pathid)
388        .get_pathid(jobid,"/")
389        .genbsr (fileid, fileid, fileid, fileid, fileid...)
390            -> on peut utiliser une table dans la base pour faire ca
391               cf bat
392
393 > 1. Unloading tapes assistent.
394 >
395 > I'm using a script which selects tapes to unload. The idea is to
396 > remove all volumes from the library that contain a current set of
397 > backups. Basically, find the volumes from the most recent full backups
398 > and all volumes that depend on these. Ignore older fulls and their
399 > differentials and incrementals.
400 >
401 > This is to ensure that, at the time volumes are unloaded, a complete
402 > set of backups can be stored safely.
403
404 Already ok
405  Jobs -> Job Zoom -> View Media -> Select them -> Eject
406
407 Yes, it's a very good idea, i see no difficulty to implement this kind of
408 tool.
409
410 Users go to 
411   Media -> Made a Safe backup set 
412         -> Select Client(s) -> Select Job(s) -> Backup set
413
414 I think that i can do some sort of assistant to that.
415 (with next, next next)
416
417
418 > While volumes are prepared for unloading, I disable them, so Bacula
419 > will not try to use them. Later, they are automatically re-enabled.
420
421 x Do you use the Enabled flag for that ? It's a good idea.
422
423 > Move these volumes (if possible) to the export slots.
424
425 I have already some code for that, but at this time it doesn't use
426 the mtx-script from bacula. (or bacula-sd commands)
427
428 I have to change this, so user have a working mtx-scripts, and we use
429 it everywhere. (The best solution is to send command to bacula-dir)
430
431 > Later, request volumes to fill up the pools so there are usable
432 > volumes for later backups around. Load these volumes from the import
433 > slots to the regular working slots, and do an 'update slots'.
434
435 I use the Scratch pool for this sort of things, but we could use an other 
436 assistant for that.
437
438 Media -> I/O -> Fill pools -> Select pool(s) -> import selections
439
440 bschedule:
441  x Bug dans la determination des jours de la semaine (exemple de la full
442   le premier dimanche du mois)
443
444 manuel :
445  - Avoir la version 2.0 et la version 2.2 en ligne (pour que les utilisateurs
446    ne se trompent pas dans les versions)
447  - Supprimer les (need bacula >= 1.xx) (dans la derniere version)
448
449 bacula :
450  - Faire un test de non regression avec pleins d'erreur
451    o pb inclusion (distante, locale)
452    o pb exclusion (distante, locale)
453    o pb execution de commande
454    o pb de config avec test du -t des differents daemon
455  x Utiliser PQescapeStringConn a la place de PQescapeString
456  - Utiliser la lib pcre
457  - Rendre les scripts bacula-ctl-xxx LSB
458  x Pouvoir utiliser les uid numeriques dans le backup des acl
459  - Avoir un script qui dump la configuration pour faire
460    des bug reports
461  p modifier l'organisation de la table version (pour pouvoir ajouter
462    les versions de bweb par exemple)
463  - utiliser la meme fonction pour read_close_session et append_close_session
464  - pb dans le message de chargement d'une bande pendant une resto
465
466         Please mount Volume "R40175" or label a new one for
467         Pas le bon message pour une resto (label a new one)
468  - Impossible de lancer une restauration en meme temps qu'un backup sur
469    un autochanger. Le code dans jobq.c qui controle les MaxConcurrentJobs
470    ne prend pas en compte les autochanger avec plusieurs drives. Ce code
471    fait surement doublon avec le nouveau code de reservation.
472    Il faudrait le simplifier, et compter les jobs de restauration comme les
473    jobs normaux. Le patch précédent ne changeait pas le MaxConcurrentJobs
474    comme il faut à la fin du backup.
475
476  - Accurate backup
477    o Envoyer la liste de tous les fichiers au client dans un format simple
478     /path/      LSTAT                   # un / a la fin pour un repertoire
479     /path/file  LSTAT
480
481    o Le client construit un hash disque (ou en memoire ou les deux)
482    o A chaque repertoire/fichier on verifie la presence du fichier dans le hash
483      et on peut aussi comparer date/taille/bloc
484       - Si le fichier n'est pas dedans, on le backup
485       - Si le fichier est present on verifie les attributs et on mark le fichier comme vu
486    o A la fin, on parcours tous le hash pour trouver les fichiers qui ne sont pas vu et 
487      on envoie la liste des fichiers supprimes avec le fileindex=0 et pourquoi pas la date
488      du jour dans le champ mtime
489    o Utiliser systematiquement l'option ignorecase sous windows
490    p Ajouter une option pour avoir la table de stat
491       Enable Statistic = yes/no
492       Statistic retention = 4 years
493
494   - Accurate backup (kern)
495 1. Run bconsole
496 2. Dir -> FD run job
497 *3. FD does a normal backup and at the same time makes a list of all files on 
498 the system (in the FileSet), marking which ones were just now backed up.
499 4. For each file backed up send attributes/data to SD.  Note, this is done 
500 during step 3 above. Minor difference, the connection with the SD is not 
501 dropped at the end of the backup -- see later.
502 *5. Send the list of all files including those backed up to the Dir
503   --> Send to SD and DIR at the same time ? 
504         filed/backup.c/encode_and_send_attributes
505
506 6. Dir computes files and deleted files.
507 7. Dir sends list of additional files (new files) to backup, and list of files
508 deleted.
509 8. FD does backup of files Dir says to save.
510 9. FD sends SD attrs of backed up files
511 10. FD sends SD delete records for files Dir wants deleted.
512 *11. FD connection to SD can be closed, this part of the backup is done.
513 *12. FD sends new list of files just backed up to Dir
514 *13. Dir adds newly backed up files to previous list sent by FD
515 *14. Dir "batch" inserts complete new list in the catalog (I forgot the name 
516 of the new table). Note this table has nothing to do with the File table.
517 *15. Dir deletes previous list in catalog.
518 *16. Dir does normal batch insert of attributes from SD, but must handle 
519 deleted records. Note, this will probably happen at the same time as the 
520 items 13-15.
521
522
523
524  o Utiliser une alist dans les runscripts
525
526 RunScript {
527    console = "xxxx"
528    console = "yyy"
529    console = "zzzz"
530 }
531
532 or possibly
533
534 RunScript {
535    console = "xxxx", "yyyy", "zzzz" 
536    console = "aaaa"
537 }
538
539  x fix segfault when config files are empty
540  o cleanup bextract to use filed code