On Sat, Jun 06, 2026 at 02:30:15PM +0000, Helge Kreutzmann wrote:
> Package: apt
> Version: 3.3.1
> Severity: normal
> 
> I recently (about two weeks ago) upgraded from stable to testing. I
> noticed that quite a few files were not upgraded. I had two packages
> pinned, which I unpinned, but no change.
> 
> If I explicitly select one of those files for install (apt install …)
> then this is installed. However I don't want to do this for all files,
> because then they become marked as automatically installed. (And
> besides, this should not happen - either they get upgraded or removed,
> but not hold back).
> 
> I tried to find out why these files are hold back, but to no avail.
> Let's take an example:
> 
> cups-filters:amd64 is selected for install because:
> 1. cups:amd64 is selected for install
> 2. cups:amd64 Depends cups-filters
> 
> I tried various other command (list, show), but I could not determine
> why these files are not install with dist-upgrade (nor upgrade).
> 
> My system is not using recommends by default, maybe this is (part of
> the problem)?
> 
> I looked at the apt bugs to see if this has been reported. It may be
> linked to #1119668, but I'm not sure. Should I maybe run those debug
> commands (or others) to help finding the root cause?
> 
> Here is the full list (notice that this list grows, it was less than 
> 90 initially).
> 
> root@twentytwo:~# LC_ALL=C apt update
> Hit:1 http://127.0.0.1:9999/ftp.de.debian.org/debian forky InRelease
> 92 packages can be upgraded. Run 'apt list --upgradable' to see them.
> root@twentytwo:~# LC_ALL=C apt upgrade
> Not upgrading:
>   cups-filters               libkf5kirigami2-5     libqt5multimediaquick5    
> libqt5quickwidgets5   libqt5waylandcompositor5  librust-block-buffer-dev   
> poppler-utils                      qml-module-qtquick-templates2
>   cups-filters-core-drivers  libkf5waylandclient5  libqt5multimediawidgets5  
> libqt5script5         libqt5webchannel5         librust-crypto-common-dev  
> python3-pyqt5                      qml-module-qtquick-window2
>   graphviz                   libkf5xmlgui5         libqt5network5t64         
> libqt5sensors5        libqt5webengine-data      librust-digest-dev         
> qdbus-qt5                          qml-module-qtquick2
>   inkscape                   libkpim6itinerary6    libqt5networkauth5        
> libqt5serialport5     libqt5webengine5          librust-getrandom-dev      
> qml-module-org-kde-kirigami2       qml-module-qtwebengine
>   kwayland-integration       libpoppler-glib8t64   libqt5positioning5        
> libqt5sql5-mysql      libqt5webenginecore5      librust-rand-core-dev      
> qml-module-qtgraphicaleffects      qt5-gtk-platformtheme
>   libcurl3t64-gnutls         libpoppler-qt5-1t64   libqt5printsupport5t64    
> libqt5sql5-psql       libqt5webenginewidgets5   librust-sha2-dev           
> qml-module-qtmultimedia            qt5-image-formats-plugins
>   libegl-mesa0               libpoppler-qt6-3t64   libqt5qml5                
> libqt5sql5-sqlite     libqt5widgets5t64         libselinux1                
> qml-module-qtqml                   qtspeech5-speechd-plugin
>   libgbm1                    libqt5core5t64        libqt5qmlmodels5          
> libqt5sql5t64         libqt5x11extras5          libsemanage2               
> qml-module-qtquick-controls        qtwayland5
>   libgl1-mesa-dri            libqt5dbus5t64        libqt5qmlworkerscript5    
> libqt5svg5            libqt5xdgiconloader3      mesa-libgallium            
> qml-module-qtquick-controls2
>   libglx-mesa0               libqt5designer5       libqt5quick5              
> libqt5test5t64        libqt5xml5t64             node-jest-debbundle        
> qml-module-qtquick-dialogs
>   libkf5i18nlocaledata5      libqt5gui5t64         libqt5quickcontrols2-5    
> libqt5texttospeech5   libqt5xmlpatterns5        pdf2djvu                   
> qml-module-qtquick-layouts
>   libkf5iconthemes5          libqt5multimedia5     libqt5quicktemplates2-5   
> libqt5waylandclient5  librust-blobby-dev        pdfgrep                    
> qml-module-qtquick-privatewidgets
> 
> Summary:
>   Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 92
> root@twentytwo:~# LC_ALL=C apt dist-upgrade
> Not upgrading:
>   cups-filters               libkf5kirigami2-5     libqt5multimediaquick5    
> libqt5quickwidgets5   libqt5waylandcompositor5  librust-block-buffer-dev   
> poppler-utils                      qml-module-qtquick-templates2
>   cups-filters-core-drivers  libkf5waylandclient5  libqt5multimediawidgets5  
> libqt5script5         libqt5webchannel5         librust-crypto-common-dev  
> python3-pyqt5                      qml-module-qtquick-window2
>   graphviz                   libkf5xmlgui5         libqt5network5t64         
> libqt5sensors5        libqt5webengine-data      librust-digest-dev         
> qdbus-qt5                          qml-module-qtquick2
>   inkscape                   libkpim6itinerary6    libqt5networkauth5        
> libqt5serialport5     libqt5webengine5          librust-getrandom-dev      
> qml-module-org-kde-kirigami2       qml-module-qtwebengine
>   kwayland-integration       libpoppler-glib8t64   libqt5positioning5        
> libqt5sql5-mysql      libqt5webenginecore5      librust-rand-core-dev      
> qml-module-qtgraphicaleffects      qt5-gtk-platformtheme
>   libcurl3t64-gnutls         libpoppler-qt5-1t64   libqt5printsupport5t64    
> libqt5sql5-psql       libqt5webenginewidgets5   librust-sha2-dev           
> qml-module-qtmultimedia            qt5-image-formats-plugins
>   libegl-mesa0               libpoppler-qt6-3t64   libqt5qml5                
> libqt5sql5-sqlite     libqt5widgets5t64         libselinux1                
> qml-module-qtqml                   qtspeech5-speechd-plugin
>   libgbm1                    libqt5core5t64        libqt5qmlmodels5          
> libqt5sql5t64         libqt5x11extras5          libsemanage2               
> qml-module-qtquick-controls        qtwayland5
>   libgl1-mesa-dri            libqt5dbus5t64        libqt5qmlworkerscript5    
> libqt5svg5            libqt5xdgiconloader3      mesa-libgallium            
> qml-module-qtquick-controls2
>   libglx-mesa0               libqt5designer5       libqt5quick5              
> libqt5test5t64        libqt5xml5t64             node-jest-debbundle        
> qml-module-qtquick-dialogs
>   libkf5i18nlocaledata5      libqt5gui5t64         libqt5quickcontrols2-5    
> libqt5texttospeech5   libqt5xmlpatterns5        pdf2djvu                   
> qml-module-qtquick-layouts
>   libkf5iconthemes5          libqt5multimedia5     libqt5quicktemplates2-5   
> libqt5waylandclient5  librust-blobby-dev        pdfgrep                    
> qml-module-qtquick-privatewidgets
> 
> Summary:
>   Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 92

You'll want to specify -o Debug::APT::Solver=3 (or 2, or 1) to see the
reasoning as it goes along. In particular, you will easily find lines
with Reject: or Install: for the specific versions, say:

    Reject:cups-filters:amd64=<new version>

that will, in a terse way explain why the new version could not be
installed:

    Reject:name:arch=version (a->b->c)

    where "a->b->c" is an implication graph, and any may be negative,
    say "a->not b->c".

It is possible all these packages are being held back because they
require removing a manually installed package (so you'd see a rule like
manual package -> some package -> .... as the reason for the
cups-filters reject).

Unfortunately there is no clear way to indicate the reason why a package
is being held back at this time; passing the information out from the
solver to the frontend is non-trivial, and it would be quite complicated
to read.

Generally speaking, `why-not` and `why` cannot explain actions, only
installed state because the actions have not been queued (like "upgrade
all packages").

It would be interesting to have a command to ask 

    apt why --command "dist-upgrade"  cups-filters/now

to ask it: "Why are you choosing to keep cups-filters at the current
version", but alas, I'm not sure how to implement that - the commands
act on different solver objects.

Similarly, you'd want to have a "?cups-filters/now" option at the prompt
to ask there but the solver object is proxied through a legacy depcache
API and already gone by the time we get to the prompt as it has applied
its changes.

We could store the entire reasoning graph in a thread-local global
object that the frontend could query to bypass the whole proper API.

Hopefully, we eventually get rid of the depcache and interface with the
solver API directly, and then we can query everything natively though.

-- 
debian developer - deb.li/jak | jak-linux.org - free software dev
ubuntu core developer                              i speak de, en

Attachment: signature.asc
Description: PGP signature

Reply via email to