[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: APT Pinning Broken?



UPDATE:

So it turns out that Andreas was actually correct.... :-/ (sorry for being a little slow )

Using APT Pinning to install only a single package from unstable while everything else is installed from bookworm works if the following applies:

  1. a=unstable is used (n=sid did not work for me)
  2. EVERY SINGLE dependency and its dependencies must be included

Here is a working list.pref.chroot​ to install only mpv from unstable using APT Pinning in case somebody else is interested:

Package: mpv base-files bsdextrautils bsdutils curl eject fdisk ffmpeg gir1.2-freedesktop gir1.2-glib-2.0 libasan8 libasound2-data.....
Pin: release a=unstable
Pin-Priority: 600

Package: *
Pin: release a=unstable
Pin-Priority: -1

The "Package:​" line is way too long to post here, it includes about 400 packages in total, just to install mpv dependencies. (This does not include recommended or suggested packages)

The core problem here is to accurately generate a list of all the dependencies and their sub-dependencies for mpv.

The `apt-cache depends --recurse` command I mentioned before fails to do this which is why it caused errors.

The correct way is to install the package locally via apt-get and grab all the packages from the install dialog or dpkg --list after.
On Thursday, August 1st, 2024 at 11:29 AM, maria.shrivinski <maria.shrivinski@proton.me> wrote:
Hey man,

apparently APT Pinning really does not account for release specific dependencies. (which is insane)

If you pin a package from a release (unstable) whose dependencies (versions) are not in the target release (stable), there will be a dependency error just like mine.

The only reason why the Pinning example given in Debian Live Manual works is because all live-* packages (and their dependencies) in trixie have the same version numbers in unstable:

Package: live-*
Pin: release n=sid
Pin-Priority: 600

Package: *
Pin: release n=sid
Pin-Priority: 1

Any other time you want to build stable or an older target release, while including only a single or a few packages from unstable, you literally cannot use APT Pinning. Because it will either return the dependency error (if Priority is lower than target release), or simply install every single package from unstable (if Priority is higher than target release).

So from what I understand, the only possible way to install only a single or couple packages from unstable, while installing everything else from stable is with a chroot hook that specifically installs the package from unstable with apt-get {/target_release} and gets all the dependencies from unstable too.

APT Pinning cannot do this, if I am correct.

Am I?

Regards
On Thursday, August 1st, 2024 at 7:19 AM, maria.shrivinski <maria.shrivinski@proton.me> wrote:
Hey man,

apparently APT Pinning really does not account for release specific dependencies. (which is insane)

If you pin a package from a release (unstable) whose dependencies (versions) are not in the target release (stable), there will be a dependency error just like mine.

The only reason why the Pinning example given in Debian Live Manual works is because all live-* packages (and their dependencies) in trixie have the same version numbers in unstable:

Package: live-*
Pin: release n=sid
Pin-Priority: 600

Package: *
Pin: release n=sid
Pin-Priority: 1

Any other time you want to build stable or an older target release, while including only a single or a few packages from unstable, you literally cannot use APT Pinning. Because it will either return the dependency error (if Priority is lower than target release), or simply install every single package from unstable (if Priority is higher than target release).

So from what I understand, the only possible way to install only a single or couple packages from unstable, while installing everything else from stable is with a chroot hook that specifically installs the package from unstable with apt-get {/target_release} and gets all the dependencies from unstable too.

APT Pinning cannot do this, if I am correct.

Am I?

Regards
On Thursday, August 1st, 2024 at 6:41 AM, Andreas Heinlein <aheinlein@gmx.com> wrote:
Hello,

it does make sense in the way that manually installing e.g. libavcodec61 with "apt-get install libavcodec61" and automatically installing it as a dependency produces the same results.

What was apt expected to do if something else already had pulled in libavcodec61 from bookworm? Upgrade it, potentially breaking the other package? Leave it alone? You need to tell it somehow.

I know this is sometimes tricky. I ended up multiple times downloading the source package from sid and rebuilding it for the current stable just to solve these dependency problems.

Bye
Andreas


Am 1. August 2024 08:17:59 MESZ schrieb "maria.shrivinski" <maria.shrivinski@proton.me>:
Hello Andreas, thanks for the reply!

The problem with adding mpv's dependencies to list.pref.chroot​ is that the same error will occur again for the dependencies of those dependencies.

 libasound2t64 : Depends: libasound2-data (>= 1.2.12-1) but 1.2.8-1 is to be installed
 libavcodec61 : Depends: libcodec2-1.2 (>= 1.2.0) but it is not installable
                Depends: libdav1d7 (>= 1.1.0) but it is not installable
                Depends: libglib2.0-0t64 (>= 2.12.0) but it is not installable
                Depends: libjxl0.9 (>= 0.8.0) but it is not installable
                Depends: librav1e0.7 (>= 0.5.1) but it is not installable
                Depends: libsnappy1v5 (>= 1.2.1) but 1.1.9-3 is to be installed
                Depends: libsvtav1enc2 (>= 2.1.0+dfsg) but it is not installable
                Depends: libvpl2 (>= 2023.3.0) but 2023.1.1-1 is to be installed
                Depends: libvpx9 (>= 1.12.0) but it is not installable
                Depends: libwebp7 (>= 1.4.0) but 1.2.4-0.2+deb12u1 is to be installed
                Depends: libwebpmux3 (>= 1.4.0) but 1.2.4-0.2+deb12u1 is to be installed
                Depends: libx264-164 (>= 2:0.164.3108+git31e19f9)
                ............

I tracked down every single dependency (and their dependencies) with this:

apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances mpv | grep "^\w" | sort -u

Then I added them to list.pref.chroot but the error always comes back for something else.
Package: mpv libasound2t64 libavcodec61 libavdevice61 libavfilter10 libavformat61 .......

I found a dirty fix with a live.chroot.hook​ that installs mpv from unstable and includes the correct dependencies from unstable too:
apt-get install -y mpv/unstable

But that's not a solution. I would really like to understand why APT Pinning does not or cannot include the dependencies of a package from the release it is pinned to. Doesn't even make any sense tbh.
On Wednesday, July 31st, 2024 at 8:56 PM, Andreas Heinlein <aheinlein@gmx.com> wrote:
Hello,

you will have to manually pin the dependencies as well. So it should read:

Package: mpv libasound2t64 libavcodec61 libavdevice61 libavfilter10 libavformat61
Pin: release n=sid
Pin-Priority: 600

That should do the trick.

Bye
Andreas


Am 31. Juli 2024 21:06:22 MESZ schrieb "maria.shrivinski" <maria.shrivinski@proton.me>:
Hello, I would like to build with bookworm as the distribution while installing the package mpv and ffmpeg from sid (unstable).

According to the Debian Live Manual this should do the trick:

config/archives/live.list.chroot

config/archives/live.pref.chroot
Package: mpv
Pin: release n=sid
Pin-Priority: 600

Package: *
Pin: release n=sid
Pin-Priority: 1

This gives a low version error because live-build tries to install mpv's dependencies from bookworm release, which has default Priority 500, while sid now only has Priority 1 for anything but mpv.

The following packages have unmet dependencies:
 mpv : Depends: libarchive13t64 (>= 3.4.0) but it is not going to be installed
       Depends: libasound2t64 (>= 1.0.27)
       Depends: libavcodec61 (>= 7:7.0)
       Depends: libavdevice61 (>= 7:7.0) but it is not going to be installed
       Depends: libavfilter10 (>= 7:7.0)
       Depends: libavformat61 (>= 7:7.0)
.......

If I set the sid Priority higher or equal to bookworm's, all packages are installed from sid because of higher version numbers.

Is there a way to only install mpv including its dependencies from sid, while all other packages are still installed from bookworm release?

Thank you so much and have a nice day!





Reply to: