Fedora's DNF 5 and the curse of mandatory too-smart output
DNF is Fedora's high(er) level package management system, which pretty much any system administrator is going to have to use to install and upgrade packages. Fedora 41 and later have switched from DNF 4 to DNF 5 as their normal (and probably almost mandatory) version of DNF. I ran into some problems with this switch, and since then I've found other issues, all of which boil down to a simple issue: DNF 5 insists on doing too-smart output.
Regardless of what you set your $TERM
to and what else you do,
if DNF 5 is connected to a terminal (and perhaps if it isn't), it
will pretty-print its output in an assortment of ways. As far as I
can tell it simply assumes ANSI cursor addressability, among other
things, and will always fit its output to the width of your terminal
window, truncating output as necessary. This includes output from
RPM package scripts that are running as part of the update. Did one of them print a line longer
than your current terminal width? Tough, it was probably truncated.
Are you using script
so that you
can capture and review all of the output from DNF and RPM package
scripts? Again, tough, you can't turn off the progress bars and
other things that will make a complete mess of the typescript.
(It's possible that you can find the information you want in /var/log/dnf5.log in un-truncated and readable form, but if so it's buried in debug output and I'm not sure I trust dnf5.log in general.)
DNF 5 is far from the only offender these days. An increasing number
of command line programs simply assume that they should always
produce 'smart' output (ideally only if they're connected to a
terminal). They have no command line option to turn this off and
since they always use 'ANSI' escape sequences, they ignore the
tradition of '$TERM
' and especially 'TERM=dumb' to turn that off.
Some of them can specifically disable colour output (typically with
one of a number of environment variables, which may or may not be
documented, and sometimes with a command line option), but that's
usually the limits of their willingness to stop doing things. The
idea of printing one whole line at a time as you do things and not
printing progress bars, interleaving output, and so on has increasingly
become a non-starter for modern command line tools.
(Another semi-offender is Debian's 'apt' and also 'apt-get' to some extent, although apt-get's progress bars can be turned off and 'apt' is explicitly a more user friendly front end to apt-get and friends.)
PS: I can't run DNF with its output directed into a file because it wants you to interact with it to approve things, and I don't feel like letting it run freely without that.
|
|