One of the changes introduced by Bullseye affects /var/log/syslog rotation:
- Buster rotates the syslog every 24 hours and keeps the current day plus the preceding 7 days (max 8 days).
- Bullseye rotates the syslog every week and keeps the current week plus the preceding 4 weeks (max 35 days).
Whether this is a good thing or not depends on your perspective. For example, you may have a daily cron job which saves "yesterday's" log to another host. If your Pi emits magic smoke, the most you will lose is "today's" log. Bullseye-style rotation implies the potential for losing all logging for "this week". Sure, you can still save "this week's" log every day as it continues to grow but it's less clean.
Anyway, make the assumption that you want to go back to Buster-style log rotation.
To achieve this, you need two things:
- A copy of
/etc/logrotate.d/rsyslogfrom a Bullseye system. This is your baseline. - A copy of
/etc/logrotate.d/rsyslogfrom a Buster system. This is your target.
Let's assume you have obtained those files and have given them the names:
rsyslog.bullseyersyslog.buster
-
Prepare the patch file:
$ diff rsyslog.bullseye rsyslog.buster >rsyslog.patch -
Change your working directory:
$ cd ~/PiBuilder/boot/scripts/support/etc -
The relevant directory on the Raspberry Pi is
/etc/logrotate.d. Thelogrotate.dfolder does not exist in PiBuilder so it has to be created:$ mkdir logrotate.d -
Place the
rsyslog.patchprepared earlier into that directory, so that you wind up with the path:~/PiBuilder/boot/scripts/support/etc/logrotate.d/rsyslog.patch -
By itself, that will not do anything because there is no "hook" in PiBuilder. The next step is to create that. Where you do that is a matter of judgement. In this case, the most appropriate place is the "epilog" for the
05_setupscript. Change your working directory and create an empty placeholder file:$ cd ~/PiBuilder/boot/scripts/support/pibuilder/epilogs $ touch 05_setup.shNote:
- the
touchcommand does not change the content of any existing file. It is always safe to run this command.
- the
-
Use your favourite text editor to open
05_setup.shand add the following lines:if is_running_OS_release bullseye ; then try_patch "/etc/logrotate.d/rsyslog" "restore buster behaviour" fiNote:
- Both the
is_running_OS_releaseandtry_patchfunctions are part of PiBuilder.
- Both the
-
Unfortunately, this creates a problem of its own.
try_patchcalls thepatchcommand and a side-effect of the patch command is to create a.bakfile. In other words, you wind up with:/etc/logrotate.d/rsyslog /etc/logrotate.d/rsyslog.bakThe
logrotateprocess simply processes everything inside thelogrotate.ddirectory. It doesn't ignore the.bakfile so it winds up rotating the logs twice.One possibility is to just remove the
.bakfile after it has been generated:if is_running_OS_release bullseye ; then try_patch "/etc/logrotate.d/rsyslog" "restore buster behaviour" sudo rm -f /etc/logrotate.d/rsyslog.bak fiThe general approach of PiBuilder is auditability so removing the evidence of patching activity is sub-optimal. It is better to teach
logrotateto ignore.bakfiles. That involves a second patch. -
Connect to a Raspberry Pi running Bullseye and change your working directory:
$ cd /etc -
Make a copy of
logrotate.confto be your baseline:$ sudo cp logrotate.conf logrotate.conf.bak -
Use
sudoand your favourite text editor to openlogrotate.conf.-
Find the lines:
# packages drop log rotation information into this directory include /etc/logrotate.d -
Before those lines, insert:
# exclude any files with the .bak extension tabooext + .bakIn words: "add
.bakto the existing list of file extensions thatlogrotateshould ignore". -
The final result should look like the reference version
-
Save your work
-
-
Prepare a patch file:
$ diff logrotate.conf.bak logrotate.conf >~/logrotate.conf.patch -
Move the patch file to the folder:
~/PiBuilder/boot/scripts/support/etc/ -
Edit the file:
~/PiBuilder/boot/scripts/support/pibuilder/epilogs/05_setup.shand make its contents look like this:
if is_running_OS_release bullseye ; then try_patch "/etc/logrotate.conf" "logrotate should ignore .bak" try_patch "/etc/logrotate.d/rsyslog" "restore buster behaviour" fiThe next time you run PiBuilder where the underlying system is Raspbian Bullseye, these two patches will be applied:
- the
logrotateprocess will ignore.bakfiles inlogrotate.d; - the two
.bakfiles will be available to prepare new patches if you need to make any further changes; and - your system will retain all the evidence of the patching activity.
- the
At the time of writing (November 2021), these were the baseline versions of /etc/logrotate.d/rsyslog on Buster and Bullseye.
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/syslog
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
The result of running:
$ diff rsyslog.bullseye rsyslog.buster >rsyslog.patch
$ cat rsyslog.patch
1a2,13
> {
> rotate 7
> daily
> missingok
> notifempty
> delaycompress
> compress
> postrotate
> /usr/lib/rsyslog/rsyslog-rotate
> endscript
> }
>
# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may also be configured here.
# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# exclude any files with the .bak extension
tabooext + .bak
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may also be configured here.
The result of running:
$ diff logrotate.conf.bak logrotate.conf > logrotate.conf.patch
$ cat logrotate.conf.patch
19a20,22
> # exclude any files with the .bak extension
> tabooext + .bak
>