Dear David,

First of all, thank you very much for taking the time to reply — and more
than that, thank you for your long-standing and invaluable contributions to
apt/Debian.

Following your message, I went ahead and performed all the suggested checks
in detail, to verify whether the packages were truly identical or not,
beyond sharing the same version number.

What I verified

I confirmed that:

1. APT correctly detects them as different packages, despite sharing the
same version string (1.31+nmu1), which already explains the behavior
observed.


2. I extracted and compared the actual .deb files provided by:

Debian official repository (deb.debian.org)

CloudPanel repository (d17k9fuiwb52nc.cloudfront.net)



3. The packages are not byte-identical:

Different file sizes

Different SHA256 hashes




Debian:      10868 bytes  sha256
a355b832d9f0f4dc9eca1a661080db5dc118e6c435f107a5c4dd201d7af59ba8
CloudPanel:  12026 bytes  sha256
95e923cec742ff773651bb0230fd0ee14aa1a7e092bd875c413f935729ae397d

4. Inspecting the control metadata (dpkg-deb -I) shows the same declared
version and metadata fields, but clearly the binaries are not identical,
confirming your point that these are distinct builds, not mere mirrors.



So your analysis was absolutely correct:
APT is behaving exactly as configured, and the repeated downgrade prompt is
a direct consequence of the repository setup.

Practical conclusion on my side

>From an operational and policy standpoint, I have decided to comment out
the trixie main entry from the CloudPanel repository on my system.

CloudPanel already provides its required components via dedicated suites
(nginx, PHP versions, varnish, etc.), and allowing a third-party repository
to also publish packages from Debian main — especially when they are
rebuilt or modified — seems risky and contrary to best practices for system
stability.

I must admit that I still do not fully understand why CloudPanel maintains
a main component at all, instead of restricting their repository strictly
to the packages they actively maintain.

For this reason, I am re-CC’ing the CloudPanel team on this thread, so they
can review whether publishing Debian base packages under main is really
intentional and advisable, particularly on Debian 13.

Appendix

Below I will include the full list of commands and outputs used during the
investigation (as previously shared), for completeness and reproducibility.

Once again, thank you very much for the clarification, the technical depth
of your explanation, and for confirming that the observed behavior is
correct given the current repository configuration.

Best regards,
Olegário A. Filho


------------------------------------------


Last login: Sat Dec 13 12:35:32 2025 from [REDACTED-IP]

user@host:~$ sudo apt update && sudo apt upgrade

[sudo] password for user:

Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]

Get:5 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]

Hit:6 http://repository.netdata.cloud/repos/stable/debian trixie/ InRelease

Hit:8 http://repository.netdata.cloud/repos/repoconfig/debian trixie/
InRelease

Hit:9 https://d17k9fuiwb52nc.cloudfront.net trixie InRelease

Hit:2 https://deb.debian.org/debian trixie InRelease

Hit:3 https://deb.debian.org/debian trixie-updates InRelease

Hit:4 https://deb.debian.org/debian trixie-backports InRelease

Hit:7 https://deb.debian.org/debian-security trixie-security InRelease

Hit:10 https://mirror.mariadb.org/repo/11.8/debian trixie InRelease

All packages are up to date.

The following packages were automatically installed and are no longer
required:

  libgnutls-dane0t64  libunbound8

Use 'sudo apt autoremove' to remove them.

DOWNGRADING:

  sgml-base

Summary:

  Upgrading: 0, Installing: 0, Downgrading: 1, Removing: 0, Not Upgrading: 0

  Download size: 12.0 kB

  Space needed: 0 B / 395 GB available

Continue? [Y/n] y

Get:1 https://d17k9fuiwb52nc.cloudfront.net trixie/main amd64 sgml-base all
1.31+nmu1 [12.0 kB]

Fetched 12.0 kB in 0s (158 kB/s)

(Reading database ... 89596 files and directories currently installed.)

Preparing to unpack .../sgml-base_1.31+nmu1_all.deb ...

Unpacking sgml-base (1.31+nmu1) over (1.31+nmu1) ...

Setting up sgml-base (1.31+nmu1) ...

Processing triggers for man-db (2.13.1-1) ...

user@host:~$ sudo apt update && sudo apt upgrade

Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]

Get:2 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]

Hit:7 http://repository.netdata.cloud/repos/stable/debian trixie/ InRelease

Hit:3 https://deb.debian.org/debian trixie InRelease

Hit:8 https://d17k9fuiwb52nc.cloudfront.net trixie InRelease

Hit:4 https://deb.debian.org/debian trixie-updates InRelease

Hit:5 https://deb.debian.org/debian trixie-backports InRelease

Hit:6 https://deb.debian.org/debian-security trixie-security InRelease

Hit:9 http://repository.netdata.cloud/repos/repoconfig/debian trixie/
InRelease

Hit:10 https://mirror.mariadb.org/repo/11.8/debian trixie InRelease

All packages are up to date.

The following packages were automatically installed and are no longer
required:

  libgnutls-dane0t64  libunbound8

Use 'sudo apt autoremove' to remove them.

DOWNGRADING:

  sgml-base

Summary:

  Upgrading: 0, Installing: 0, Downgrading: 1, Removing: 0, Not Upgrading: 0

  Download size: 12.0 kB

  Space needed: 0 B / 395 GB available

Continue? [Y/n] y

Get:1 https://d17k9fuiwb52nc.cloudfront.net trixie/main amd64 sgml-base all
1.31+nmu1 [12.0 kB]

Fetched 12.0 kB in 0s (172 kB/s)

(Reading database ... 89596 files and directories currently installed.)

Preparing to unpack .../sgml-base_1.31+nmu1_all.deb ...

Unpacking sgml-base (1.31+nmu1) over (1.31+nmu1) ...

Setting up sgml-base (1.31+nmu1) ...

Processing triggers for man-db (2.13.1-1) ...

user@host:~$ sudo apt update && sudo apt upgrade

Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]

Get:2 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]

Hit:7 http://repository.netdata.cloud/repos/stable/debian trixie/ InRelease

Hit:3 https://deb.debian.org/debian trixie InRelease

Hit:8 https://d17k9fuiwb52nc.cloudfront.net trixie InRelease

Hit:4 https://deb.debian.org/debian trixie-updates InRelease

Hit:5 https://deb.debian.org/debian trixie-backports InRelease

Hit:6 https://deb.debian.org/debian-security trixie-security InRelease

Hit:9 http://repository.netdata.cloud/repos/repoconfig/debian trixie/
InRelease

Hit:10 https://mirror.mariadb.org/repo/11.8/debian trixie InRelease

All packages are up to date.

The following packages were automatically installed and are no longer
required:

  libgnutls-dane0t64  libunbound8

Use 'sudo apt autoremove' to remove them.

DOWNGRADING:

  sgml-base

Summary:

  Upgrading: 0, Installing: 0, Downgrading: 1, Removing: 0, Not Upgrading: 0

  Download size: 12.0 kB

  Space needed: 0 B / 395 GB available

Continue? [Y/n] n

Abort.

user@host:~$ ls -1 /var/lib/apt/lists | egrep
'd17k9fui|Packages|debian\.list' | head -n 200

_etc_apt_mirrors_debian-security.list_dists_trixie-security_main_binary-amd64_Packages

_etc_apt_mirrors_debian.list_dists_trixie-backports_InRelease

_etc_apt_mirrors_debian.list_dists_trixie-backports_main_binary-amd64_Packages

_etc_apt_mirrors_debian.list_dists_trixie-backports_main_i18n_Translation-en

_etc_apt_mirrors_debian.list_dists_trixie-backports_main_source_Sources

_etc_apt_mirrors_debian.list_dists_trixie-updates_InRelease

_etc_apt_mirrors_debian.list_dists_trixie-updates_main_binary-amd64_Packages

_etc_apt_mirrors_debian.list_dists_trixie-updates_main_i18n_Translation-en

_etc_apt_mirrors_debian.list_dists_trixie-updates_main_source_Sources

_etc_apt_mirrors_debian.list_dists_trixie_InRelease

_etc_apt_mirrors_debian.list_dists_trixie_main_binary-amd64_Packages

_etc_apt_mirrors_debian.list_dists_trixie_main_i18n_Translation-en

_etc_apt_mirrors_debian.list_dists_trixie_main_source_Sources

d17k9fuiwb52nc.cloudfront.net_dists_trixie_InRelease

d17k9fuiwb52nc.cloudfront.net_dists_trixie_main_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_nginx_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-7.1_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-7.2_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-7.3_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-7.4_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-8.0_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-8.1_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-8.2_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-8.3_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-8.4_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_php-8.5_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_proftpd_binary-amd64_Packages

d17k9fuiwb52nc.cloudfront.net_dists_trixie_varnish-7_binary-amd64_Packages

mirror.mariadb.org_repo_11.8_debian_dists_trixie_main_binary-amd64_Packages

mirror.mariadb.org_repo_11.8_debian_dists_trixie_main_binary-arm64_Packages

repository.netdata.cloud_repos_repoconfig_debian_trixie_Packages

repository.netdata.cloud_repos_stable_debian_trixie_Packages

user@host:~$ sudo apt install -y lz4

The following packages were automatically installed and are no longer
required:

  libgnutls-dane0t64  libunbound8

Use 'sudo apt autoremove' to remove them.

Installing:

  lz4

Summary:

  Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 0

  Download size: 51.7 kB

  Space needed: 146 kB / 395 GB available

Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]

Get:2 https://deb.debian.org/debian trixie/main amd64 lz4 amd64 1.10.0-4
[51.7 kB]

Fetched 51.7 kB in 0s (409 kB/s)

Selecting previously unselected package lz4.

(Reading database ... 89596 files and directories currently installed.)

Preparing to unpack .../lz4_1.10.0-4_amd64.deb ...

Unpacking lz4 (1.10.0-4) ...

Setting up lz4 (1.10.0-4) ...

Processing triggers for man-db (2.13.1-1) ...

user@host:~$ ls -1 /var/lib/apt/lists/*d17k9fui*Packages*.lz4

ls: cannot access '/var/lib/apt/lists/*d17k9fui*Packages*.lz4': No such
file or directory

user@host:~$ ls -1 /var/lib/apt/lists/*mirrors*debian.list*Packages*.lz4

ls: cannot access '/var/lib/apt/lists/*mirrors*debian.list*Packages*.lz4':
No such file or directory

user@host:~$ # CloudPanel

user@host:~$ sudo lz4cat
/var/lib/apt/lists/*d17k9fui*trixie_main*_Packages*.lz4 \

| awk 'BEGIN{p=0} $0=="Package: sgml-base"{p=1} p{print} p && $0==""{exit}'
\

> /tmp/sgml-base.cloudpanel.stanza

/var/lib/apt/lists/*d17k9fui*trixie_main*_Packages*.lz4: No such file or
directory

user@host:~$

user@host:~$ # Debian (mirror+file)

user@host:~$ sudo lz4cat
/var/lib/apt/lists/*mirrors*debian.list*trixie_main*_Packages*.lz4 \

| awk 'BEGIN{p=0} $0=="Package: sgml-base"{p=1} p{print} p && $0==""{exit}'
\

> /tmp/sgml-base.debian.stanza

/var/lib/apt/lists/*mirrors*debian.list*trixie_main*_Packages*.lz4: No such
file or directory

user@host:~$ diff -u /tmp/sgml-base.debian.stanza
/tmp/sgml-base.cloudpanel.stanza | sed -n '1,200p'

user@host:~$ # adjust exact paths from Filename:

user@host:~$ DEB_FN="pool/main/s/sgml-base/sgml-base_1.31+nmu1_all.deb"

user@host:~$ CP_FN="pool/main/s/sgml-base/sgml-base_1.31+nmu1_all.deb"

user@host:~$ wget -O /tmp/sgml-base.debian.deb "
https://deb.debian.org/debian/$DEB_FN";

--2025-12-13 12:42:19--
https://deb.debian.org/debian/pool/main/s/sgml-base/sgml-base_1.31+nmu1_all.deb

Resolving deb.debian.org (deb.debian.org)... 2a04:4e42:3d::644,
199.232.2.132

Connecting to deb.debian.org (deb.debian.org)|2a04:4e42:3d::644|:443...
connected.

HTTP request sent, awaiting response... 200 OK

Length: 10868 (11K) [application/vnd.debian.binary-package]

Saving to: '/tmp/sgml-base.debian.deb'

/tmp/sgml-base.debian.deb 100%[=============>]  10.61K  --.-KB/s    in 0s

2025-12-13 12:42:19 (66.2 MB/s) - '/tmp/sgml-base.debian.deb' saved
[10868/10868]

user@host:~$ wget -O /tmp/sgml-base.cloudpanel.deb "
https://d17k9fuiwb52nc.cloudfront.net/$CP_FN";

--2025-12-13 12:42:20--
https://d17k9fuiwb52nc.cloudfront.net/pool/main/s/sgml-base/sgml-base_1.31+nmu1_all.deb

Resolving d17k9fuiwb52nc.cloudfront.net (d17k9fuiwb52nc.cloudfront.net)...
2600:9000:28b2:2400:1f:bfe9:ea00:93a1,
2600:9000:28b2:7800:1f:bfe9:ea00:93a1,
2600:9000:28b2:2a00:1f:bfe9:ea00:93a1, ...

Connecting to d17k9fuiwb52nc.cloudfront.net
(d17k9fuiwb52nc.cloudfront.net)|2600:9000:28b2:2400:1f:bfe9:ea00:93a1|:443...
connected.

HTTP request sent, awaiting response... 200 OK

Length: 12026 (12K) [application/octet-stream]

Saving to: '/tmp/sgml-base.cloudpanel.deb'

/tmp/sgml-base.cloudpanel.deb 100%[=============>]  11.74K  --.-KB/s    in
0s

2025-12-13 12:42:20 (209 MB/s) - '/tmp/sgml-base.cloudpanel.deb' saved
[12026/12026]

user@host:~$

user@host:~$ sha256sum /tmp/sgml-base.debian.deb
/tmp/sgml-base.cloudpanel.deb

a355b832d9f0f4dc9eca1a661080db5dc118e6c435f107a5c4dd201d7af59ba8
/tmp/sgml-base.debian.deb

95e923cec742ff773651bb0230fd0ee14aa1a7e092bd875c413f935729ae397d
/tmp/sgml-base.cloudpanel.deb

user@host:~$ dpkg-deb -I /tmp/sgml-base.debian.deb | sed -n '1,120p'

 new Debian package, version 2.0.

 size 10868 bytes: control archive=2292 bytes.

     763 bytes,    21 lines      control

    1054 bytes,    15 lines      md5sums

    3236 bytes,   115 lines   *  postinst             #!/bin/sh

    1157 bytes,    36 lines   *  postrm               #!/bin/sh

     669 bytes,    21 lines   *  preinst              #!/bin/sh

    1180 bytes,    43 lines   *  prerm                #!/bin/sh

      96 bytes,     4 lines      triggers

 Package: sgml-base

 Version: 1.31+nmu1

 Architecture: all

 Maintainer: Debian QA Group <[email protected]>

 Installed-Size: 65

 Suggests: sgml-base-doc

 Section: text

 Priority: optional

 Multi-Arch: foreign

 Description: SGML infrastructure and SGML catalog file support

  This package creates the SGML infrastructure directories and provides

  SGML catalog file support in compliance with the current Debian SGML

  Policy draft:

  .

    * infrastructure directories:

       - /etc/sgml

       - /usr/share/sgml/{declaration,dtd,entities,misc,stylesheet}

       - /usr/share/local/sgml/{declaration,dtd,entities,misc,stylesheet}

  .

    * update-catalog(8): tool for maintaining the root SGML catalog

      file and the package SGML catalog files in the '/etc/sgml' directory.

user@host:~$ dpkg-deb -I /tmp/sgml-base.cloudpanel.deb | sed -n '1,120p'

 new Debian package, version 2.0.

 size 12026 bytes: control archive=2292 bytes.

     763 bytes,    21 lines      control

    1054 bytes,    15 lines      md5sums

    3236 bytes,   115 lines   *  postinst             #!/bin/sh

    1157 bytes,    36 lines   *  postrm               #!/bin/sh

     669 bytes,    21 lines   *  preinst              #!/bin/sh

    1180 bytes,    43 lines   *  prerm                #!/bin/sh

      96 bytes,     4 lines      triggers

 Package: sgml-base

 Version: 1.31+nmu1

 Architecture: all

 Maintainer: Debian QA Group <[email protected]>

 Installed-Size: 65

 Suggests: sgml-base-doc

 Section: text

 Priority: optional

 Multi-Arch: foreign

 Description: SGML infrastructure and SGML catalog file support

  This package creates the SGML infrastructure directories and provides

  SGML catalog file support in compliance with the current Debian SGML

  Policy draft:

  .

    * infrastructure directories:

       - /etc/sgml

       - /usr/share/sgml/{declaration,dtd,entities,misc,stylesheet}

       - /usr/share/local/sgml/{declaration,dtd,entities,misc,stylesheet}

  .

    * update-catalog(8): tool for maintaining the root SGML catalog

      file and the package SGML catalog files in the '/etc/sgml' directory.

user@host:~$




On Sat, Dec 13, 2025, 12:03 David Kalnischkies <[email protected]>
wrote:

> Am Thu, Dec 11, 2025 at 11:44:31PM -0300, schrieb Olegário A. Filho:
> > 2) apt policy output for the affected package
> >
> >     # apt policy sgml-base
> >     sgml-base:
> >       Installed: 1.31+nmu1
> >       Candidate: 1.31+nmu1
> >       Version table:
> >      *** 1.31+nmu1 500
> >             500 mirror+file:/etc/apt/mirrors/debian.list trixie/main
> amd64
> > Packages
> >             100 /var/lib/dpkg/status
> >          1.31+nmu1 1000
> >            1000 https://d17k9fuiwb52nc.cloudfront.net trixie/main amd64
> > Packages
> >
> > Note: the same version (1.31+nmu1) is available from both Debian’s mirror
> > and CloudPanel’s “trixie main” repository.
>
> That isn't the same version. It has the same version number, yes, but
> libapt has detected a subtil difference in those packages. Their hashes
> might be different if the package doesn't build reproducibly or the
> dependencies (versions) differ. Are you sure the packages are "copied"
> and not also (re)build there? Its "easiest" to look at the stanzas in
> the Packages files and compare those for EXACT match. libapt does slight
> massaging, but even a spurious 0:-epoch can throw it off (not all fields
> are compared, but without looking I suspect a dependency with a non-
> canonical version number that is differently formatted by different
> tools. libapt does not canonicalize version numbers – too expensive).
>
>
> Given the versions are different and apt detects the installed one as
> the one from Debian (also hinting at a small difference caused by
> different repository generators) the behaviour you encounter is actually
> the one you have configured to happen and is correct.
>
> If the versions are detected as the same, they are grouped together
> under the same version number, like the Debian version and the installed
> version are grouped together. The other one would be the third line in
> this group – if they were detected as the same.
>
>
> Best regards
>
> David Kalnischkies
>

Reply via email to