From Fedora Project Wiki
m (1 revision(s)) |
|||
Line 120: | Line 120: | ||
* A and B (no <code>%ghost</code> or <code>%config</code>) plus E (plain <code>%ghost</code>) remove logfiles completely | * A and B (no <code>%ghost</code> or <code>%config</code>) plus E (plain <code>%ghost</code>) remove logfiles completely | ||
* cases C, F, G and H (various <code>%config</code> attributes) rename old logfiles to <code>.rpmsave</code>; since <code>.rpmsave</code> files will not be backup-ed by rpm, subsequent <code>rpm -U ; rpm -e</code> operations will cause loss of logfiles too | * cases C, F, G and H (various <code>%config</code> attributes) rename old logfiles to <code>.rpmsave</code>; since <code>.rpmsave</code> files will not be backup-ed by rpm, subsequent <code>rpm -U ; rpm -e</code> operations will cause loss of logfiles too | ||
[[Category:Packaging guidelines drafts]] |
Revision as of 02:20, 25 February 2009
Handling of Logfiles
Goals
- logfiles should stay intact during package upgrades (e.g. do not lose old content)
- logfiles should not be removed by package removals
rpm -V
operations should not list them as bad files- logfiles should be associated with an rpm packages
Sniplet
%post test -e %logfile || { touch %logfile chmod 0620 %logfile chown root:somegroup %logfile } %files %ghost %config %logfile
Rationale
rpm knows several attributes (%verify, %ghost, %config) which are candidates for handling logfiles. The following spec file uses possible combinations and shows their effects:
%global foos A B C D E F H %global logdir /var/log/%name Name: foo Version: 1 Release: 1 Summary: none Group: none License: GPL BuildRoot: %_tmppath/%name-%version-%release-root BuildArch: noarch %description %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%logdir for i in %foos; do touch $RPM_BUILD_ROOT%logdir/foo-$i done %post for i in %foos; do date >> %logdir/foo-$i done date >> %logfile/foo-Z %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %logdir/foo-A %verify(not md5 size mtime) %logdir/foo-B %config %verify(not md5 size mtime) %logdir/foo-C %config %ghost %logdir/foo-D %ghost %logdir/foo-E %config %logdir/foo-F %config(noreplace) %logdir/foo-G %config(noreplace) %verify(not md5 size mtime) %logdir/foo-H
Initial installation
S.5....T /var/log/foo/foo-A S.5....T c /var/log/foo/foo-F S.5....T c /var/log/foo/foo-G foo-1-1 foo-1-1 foo-1-1 foo-1-1 foo-1-1 foo-1-1 foo-1-1 foo-1-1 file /var/log/foo/foo-Z is not owned by any package
Conclusion::
- case A (no attributes), F (plain %config) and G (%config(noreplace)) are violating third constraint (silent
rpm -V
) - case Z (not listed in %files) can not be associated with rpm package which violates fourth constraint
Upgrade
- increase
Release
1 /var/log/foo/foo-A 1 /var/log/foo/foo-B 2 /var/log/foo/foo-C 2 /var/log/foo/foo-D 2 /var/log/foo/foo-E 2 /var/log/foo/foo-F 2 /var/log/foo/foo-G 2 /var/log/foo/foo-H 2 /var/log/foo/foo-Z
Conclusion:: case A (no attributes) and B (only %verify) are violating first constraint (content must stay intact during upgrade)
Removal
warning: /var/log/foo/foo-H saved as /var/log/foo/foo-H.rpmsave warning: /var/log/foo/foo-G saved as /var/log/foo/foo-G.rpmsave warning: /var/log/foo/foo-F saved as /var/log/foo/foo-F.rpmsave warning: /var/log/foo/foo-C saved as /var/log/foo/foo-C.rpmsave foo-C.rpmsave foo-D foo-F.rpmsave foo-G.rpmsave foo-H.rpmsave foo-Z
Conclusion::
- only cases D (
%config %ghost
) and Z (not listed in%files
) do not remove file after removal - A and B (no
%ghost
or%config
) plus E (plain%ghost
) remove logfiles completely - cases C, F, G and H (various
%config
attributes) rename old logfiles to.rpmsave
; since.rpmsave
files will not be backup-ed by rpm, subsequentrpm -U ; rpm -e
operations will cause loss of logfiles too