Your message dated Wed, 3 Dec 2025 11:08:47 +0100
with message-id <[email protected]>
and subject line Re: Bug#1121807: ITP: dpkg monthly named logs via symlink 
(replace logrotate dependency)
has caused the Debian Bug report #1121807,
regarding ITP: dpkg monthly named logs via symlink (replace logrotate 
dependency)
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1121807: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1121807
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: dpkg
Version: 1.22.21
Severity: wishlist

Dear Maintainer,

## Problem

Current dpkg.log rotation via `/etc/logrotate.d/dpkg` (monthly, rotate 12) has several limitations:

1. Limited history: Only 12 months retained by default
2. logrotate dependency: Cron overhead, configuration complexity
3. No distro-long tracking: Current logs don't contain Debian version info
4. Manual cleanup complexity: `rm dpkg.log.*` vs explicit `rm dpkg-2025-*`
5. Tooling expectations: Scripts expect `dpkg.log`/`dpkg.log.1` pattern

## Proposal: Symlink-based Monthly Logs

Keep dpkg-core UNCHANGED. Use `/var/log/dpkg.log` as symlink to current
monthly file.
Optionally prepend Debian version to log filenames:

dpkg-trixie-2025-12.log ← /var/log/dpkg.log (symlink, current month UNCOMPRESSED)
dpkg-trixie-2025-11.log.gz (COMPRESSED)
dpkg-trixie-2025-10.log.gz (COMPRESSED)
dpkg-trixie-2025-09.log.gz (COMPRESSED)
dpkg-bookworm-2025-08.log.gz (COMPRESSED)
...
dpkg-bookworm-2024-12.log.gz (COMPRESSED)
...

Benefits:
✅ NO dpkg core changes (fopen("/var/log/dpkg.log") works transparently)
✅ NO logrotate dependency (1 cron.monthly job)
✅ Distro-long history WITH version info: zgrep upgrade /var/log/dpkg-*.log
✅ Manual control: rm /var/log/dpkg-trixie-*.log
✅ Atomic switches via rename()
✅ ~15kB/month compressed → 500kB/3 years (negligible)
✅ Works on embedded (RPi, IoT) without rotation complexity

## Implementation (Trivial)

1. dpkg.cfg.d/10-symlinklogs:

LOGFILE="/var/log/dpkg.log"


2. /etc/cron.monthly/dpkg-monthly:

#!/bin/bash
# Atomic monthly log switch with optional distro prefix
DISTRO=$(grep '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2)
YEAR=$(date +%Y)
MONTH=$(date +%m)
NEWLOG="/var/log/dpkg-${DISTRO}-${YEAR}-${MONTH}.log"
[ ! -f "$NEWLOG" ] && touch "$NEWLOG" && chown root:root "$NEWLOG" && chmod 644 "$NEWLOG"
# Atomic symlink switch
ln -sfT "$NEWLOG" /var/log/dpkg.log

# compression of OLD logs only:
find /var/log -name 'dpkg-*.log' -not -newermt "$(date +%Y-%m-01)" -exec gzip {} \;

3. Disable logrotate:

mv /etc/logrotate.d/dpkg /etc/logrotate.d/dpkg.disabled


## Usage example

zgrep upgrade /var/log/dpkg.log                     # Current month
zgrep upgrade /var/log/dpkg-trixie-2025-10.log # Trixie, October 2025 history only
zgrep upgrade /var/log/dpkg-*.log                   # All history
zgrep upgrade /var/log/dpkg-trixie-*.log # Trixie only and everything since release zgrep upgrade /var/log/dpkg-trixie-2025*.log # Trixie and year 2025 history only
rm /var/log/dpkg-bookworm-*.log                     # Delete Bookworm

## Migration from current system

for f in /var/log/dpkg.log*; do
    DISTRO=$(grep '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2)
    CREATEDATE=$(stat -c %y "$f" | cut -d' ' -f1 | sed 's/\./-/g')
    YEAR=${CREATEDATE:0:4}
    MONTH=${CREATEDATE:5:2}
    mv "$f" "/var/log/dpkg-${DISTRO}-${YEAR}-${MONTH}.log"
done
ln -sf /var/log/dpkg-$(grep '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2)-$(date +%Y-%m).log /var/log/dpkg.log


## Addressing Concerns

Q: What about wrong system time?
A: systemd-timer (`OnCalendar=monthly`) or `hwclock`-based fallback

Q: Race conditions?
A: `ln -sfT` + file existence check = atomic

Q: Backward compatibility?
A: `/var/log/dpkg.log` works exactly as before

Q: Embedded systems?
A: No logrotate parsing/rotation → less complexity

Q: Alternative naming?
A: `/var/log/dpkg-current.log` more explicit (optional migration path)

## Why superior to logrotate

Feature                         | logrotate        | Symlink
--------------------------------|------------------|--------
Dependencies                    | cron + logrotate | cron only
History                         | 12 months        | Unlimited + Distro
Cleanup of time specific logs   | Complex          | rm dpkg-trixie-*
Distro tracking                 | None             | Native in filename
Size/Month | ~50kB | ~15kB gz for last months and older
dpkg changes                    | None             | None

## Request

1. Ship monthly cron + symlink setup in dpkg package
2. Document in `dpkg(1)` manpage
3. Disable `/etc/logrotate.d/dpkg` by default
4. Optional: Migrate file naming from dpkg.log to dpkg-current.log over time, because its name is more intuitive (clearly indicating the current log) 5. Optional: Migrate location of dpkg-*.log files to /var/log/dpkg/ (dpkg.log symlink can stay in /var/log/)

This eliminates 25+ year old logrotate complexity while preserving all
compatibility. Modern storage makes unlimited history practical.

-- System Information:
Debian GNU/Linux 13 (trixie)
dpkg 1.22.21

Regards,
Oliver C.

--- End Message ---
--- Begin Message ---
On Wed, Dec 03, 2025 at 03:56:36AM +0100, Oliver C. wrote:
> Package: dpkg
> Version: 1.22.21
> Severity: wishlist
> 
> Dear Maintainer,
> 
> ## Problem
> 
> Current dpkg.log rotation via `/etc/logrotate.d/dpkg` (monthly, rotate 12)
> has several limitations:
> 

Please don't send AI slop to the BTS.

Best,
Chris

--- End Message ---

Reply via email to