On Wed, Jul 01, 2015 at 03:12:55PM +0200, Pino Toscano wrote:
When cleaning the directories with cron/at jobs, remove only files
there, as subdirectories might be used by other systems; for example
in Debian under /var/spool/cron/ there is the atjobs subdirectory with
the actual at queue.
Make sure to not remove .SEQ files anymore, as they represent the at job
counter which is needed by the at daemon. Instead, reset these files to
0.
Furthermore, add also the path to the .SEQ location in Debian-based
systems.
---
sysprep/sysprep_operation_cron_spool.ml | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/sysprep/sysprep_operation_cron_spool.ml
b/sysprep/sysprep_operation_cron_spool.ml
index 687a7e9..888b97a 100644
--- a/sysprep/sysprep_operation_cron_spool.ml
+++ b/sysprep/sysprep_operation_cron_spool.ml
@@ -18,19 +18,32 @@
open Sysprep_operation
open Common_gettext.Gettext
+open Common_utils
module G = Guestfs
let cron_spool_perform (g : Guestfs.guestfs) root side_effects =
- Array.iter g#rm_rf (g#glob_expand "/var/spool/cron/*");
+ let is_seq path =
+ let basename =
+ try last_part_of path '/'
+ with Not_found -> path in
+ basename = ".SEQ" in
+ let reset f =
+ if g#is_file f then
+ (* This should overwrite the file in-place, as it's a very
+ * small buffer which will be handled using internal_write.
+ * This way, existing attributes like SELinux labels are
+ * preserved.
+ *)
+ g#write f "00000\n" in
+
+ rm_rf_only_files g ~filter:is_seq "/var/spool/cron/";
+ reset "/var/spool/cron/atjobs/.SEQ";
Array.iter g#rm (g#glob_expand "/var/spool/atjobs/*");
- Array.iter g#rm (g#glob_expand "/var/spool/atjobs/.SEQ");
+ reset "/var/spool/atjobs/.SEQ";
Array.iter g#rm (g#glob_expand "/var/spool/atspool/*");
- Array.iter
- (fun path -> if not (g#is_dir path) then g#rm path)
- (g#glob_expand "/var/spool/at/*");
- Array.iter g#rm (g#glob_expand "/var/spool/at/.SEQ");
- Array.iter g#rm (g#glob_expand "/var/spool/at/spool/*")
+ rm_rf_only_files g ~filter:is_seq "/var/spool/at/";
+ reset "/var/spool/at/.SEQ"
ACK.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top