这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@TomJo2000
Copy link
Member

@TomJo2000 TomJo2000 commented Apr 8, 2025

Currently fails with:

FAILED: apt-pkg/CMakeFiles/apt-pkg.dir/edsp.cc.o 
/home/builder/.termux-build/_cache/android-r27c-api-24-v1/bin/clang++ --target=aarch64-none-linux-android --gcc-toolchain=/home/builder/.termux-build/_cache/android-r27c-api-24-v1 --sysroot=/home/builder/.termux-build/_cache/android-r27c-api-24-v1/sysroot -D_WITH_GETLINE=1 -Dapt_pkg_EXPORTS -I/home/builder/.termux-build/apt/build/include -I/home/builder/.termux-build/apt/build/include/apt-pkg -fstack-protector-strong -Oz -Wno-c++11-narrowing --target=aarch64-linux-android24  -isystem/data/data/com.termux/files/usr/include/c++/v1 -isystem/data/data/com.termux/files/usr/include -O3 -DNDEBUG -std=gnu++17 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -Wcast-align -Wredundant-decls -Wmissing-declarations -Wctor-dtor-privacy -Wdisabled-optimization -Winit-self -Wmissing-include-dirs -Wsign-promo -Wundef -Wdouble-promotion -Wsuggest-override -Werror=suggest-override -Werror=return-type -Wp,-D_GLIBCXX_ASSERTIONS -MD -MT apt-pkg/CMakeFiles/apt-pkg.dir/edsp.cc.o -MF apt-pkg/CMakeFiles/apt-pkg.dir/edsp.cc.o.d -o apt-pkg/CMakeFiles/apt-pkg.dir/edsp.cc.o -c /home/builder/.termux-build/apt/src/apt-pkg/edsp.cc
In file included from /home/builder/.termux-build/apt/src/apt-pkg/edsp.cc:10:
In file included from /home/builder/.termux-build/apt/build/include/apt-pkg/algorithms.h:32:
In file included from /home/builder/.termux-build/apt/build/include/apt-pkg/cachefilter.h:9:
/home/builder/.termux-build/apt/build/include/apt-pkg/pkgcache.h:638:39: warning: unknown attribute 'unavailable' ignored [-Wunknown-attributes]
  638 |    map_pointer<Version> VersionList [[gnu::unavailable("not yet available")]];
      |                                       ^~~~~~~~~~~~~~~~
/home/builder/.termux-build/apt/build/include/apt-pkg/pkgcache.h:639:51: warning: unknown attribute 'unavailable' ignored [-Wunknown-attributes]
  639 |    map_pointer<SourceVersion> NextSourceVersion [[gnu::unavailable("not yet available")]];
      |                                                   ^~~~~~~~~~~~~~~~

@TomJo2000 TomJo2000 requested a review from Grimler91 as a code owner April 8, 2025 23:31
@TomJo2000
Copy link
Member Author

TomJo2000 commented Apr 8, 2025

That part of apt-pkg/pkgcache.h does seem to have changed between 2.8.1 (which we ship now) and 3.0.0, here's the hunk:

@@ -611,8 +619,27 @@ struct pkgCache::DescFile
    map_pointer<DescFile> NextFile;
    /** \brief position in the file */
    map_filesize_t Offset;         // File offset
-   /** @TODO document pkgCache::DescFile::Size */
-   map_filesize_t Size;
+};
+									/*}}}*/
+// SourceVersion structure					 	/*{{{*/
+/** \brief information for a single version of a source package
+
+    The version list is always sorted from highest version to lowest
+    version by the generator. Equal version numbers are either merged
+    or handled as separate versions based on the Hash value. */
+struct pkgCache::SourceVersion
+{
+   /** \brief unique sequel ID */
+   map_id_t ID;
+   /** \brief Group the source package belongs too */
+   map_pointer<pkgCache::Group> Group;
+   /** \brief complete version string */
+   map_stringitem_t VerStr;
+   map_pointer<Version> VersionList [[gnu::unavailable("not yet available")]];
+   map_pointer<SourceVersion> NextSourceVersion [[gnu::unavailable("not yet available")]];
+
+   /** \brief Private pointer */
+   map_pointer<void> d;
https://salsa.debian.org/apt-team/apt/-/blob/3.0.0/apt-pkg/pkgcache.h?ref_type=tags#L638

@TomJo2000 TomJo2000 marked this pull request as draft April 8, 2025 23:42
@TomJo2000
Copy link
Member Author

Thanks for the help @licy183, I just saw this now.

@TomJo2000
Copy link
Member Author

TomJo2000 commented Apr 12, 2025

I'm doing on-device testing with the DEBs from this PR now.

I have already encountered one issue.

Warning: Could not execute pager - PagerSetup (2: No such file or directory)

Edit: Okay this is "newly" introduced in 2.9.181, and defaults to pager, which we don't ship.
Should be as simple as passing a build option.
Making it default to less seems sensible.

Footnotes

  1. https://salsa.debian.org/apt-team/apt/-/blob/3.0.0/debian/changelog?ref_type=tags#L392-404

@TomJo2000
Copy link
Member Author

TomJo2000 commented Apr 23, 2025

Okay, that fixed apt-file but now I'm getting the following two things.

~$ pkg up                                                                                                                                                          
Checking availability of current mirror:
[*] https://packages-cf.termux.dev/apt/termux-main: ok
CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/lib/apt/methods/https": library "libseccomp.so" not found: needed by main executable
CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/lib/apt/methods/https": library "libseccomp.so" not found: needed by main executable
CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/lib/apt/methods/https": library "libseccomp.so" not found: needed by main executable
CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/lib/apt/methods/https": library "libseccomp.so" not found: needed by main executable
Error: Method https has died unexpectedly!
Error: Sub-process https returned an error code (1)
Error: Method /data/data/com.termux/files/usr/lib/apt/methods/https did not start correctly
Error: Method https has died unexpectedly!
Error: Sub-process https returned an error code (1)
Error: Method /data/data/com.termux/files/usr/lib/apt/methods/https did not start correctly
Error: Method https has died unexpectedly!
Error: Sub-process https returned an error code (1)
Error: Method /data/data/com.termux/files/usr/lib/apt/methods/https did not start correctly
Error: Method https has died unexpectedly!
Error: Sub-process https returned an error code (1)
Error: Method /data/data/com.termux/files/usr/lib/apt/methods/https did not start correctly
Error: Failed to fetch https://packages-cf.termux.dev/apt/termux-main/dists/stable/InRelease  
Error: Failed to fetch https://packages-cf.termux.dev/apt/termux-root/dists/root/InRelease  
Error: Failed to fetch https://tur.kcubeterm.com/dists/tur-packages/InRelease  
Error: Failed to fetch https://packages-cf.termux.dev/apt/termux-x11/dists/x11/InRelease  
Error: Some index files failed to download. They have been ignored, or old ones used instead.
Notice: Some sources can be modernized. Run 'apt modernize-sources' to do so.

Edit: looks like a missing dependency.

~$ apt modernize-sources 
The following files need modernizing:
  - /data/data/com.termux/files/usr/etc/apt/sources.list
  - /data/data/com.termux/files/usr/etc/apt/sources.list.d/root.list
  - /data/data/com.termux/files/usr/etc/apt/sources.list.d/tur.list
  - /data/data/com.termux/files/usr/etc/apt/sources.list.d/x11.list

Modernizing will replace .list files with the new .sources format,
add Signed-By values where they can be determined automatically,
and save the old files into .list.bak files.

This command supports the 'signed-by' and 'trusted' options. If you
have specified other options inside [] brackets, please transfer them
manually to the output files; see sources.list(5) for a mapping.

For a simulation, respond N in the following prompt.
Rewrite 4 sources? [Y/n] N
Simulating only...
Modernizing /data/data/com.termux/files/usr/etc/apt/sources.list...

# Would write to: /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources
# Modernized from /data/data/com.termux/files/usr/etc/apt/sources.list
Types: deb
URIs: https://packages-cf.termux.dev/apt/termux-main/
Suites: stable
Components: main 
Signed-By: 
Warning: Could not determine Signed-By for URIs: https://packages-cf.termux.dev/apt/termux-main/, Suites: stable

Modernizing /data/data/com.termux/files/usr/etc/apt/sources.list.d/root.list...

# Would write to: /data/data/com.termux/files/usr/etc/apt/sources.list.d/root.sources
Types: deb
URIs: https://packages-cf.termux.dev/apt/termux-root/
Suites: root
Components: stable 
Signed-By: 
Warning: Could not determine Signed-By for URIs: https://packages-cf.termux.dev/apt/termux-root/, Suites: root

Modernizing /data/data/com.termux/files/usr/etc/apt/sources.list.d/tur.list...

# Would write to: /data/data/com.termux/files/usr/etc/apt/sources.list.d/tur.sources
Types: deb
URIs: https://tur.kcubeterm.com/
Suites: tur-packages
Components: tur  tur-on-device tur-continuous
Signed-By: /data/data/com.termux/files/usr/etc/apt/trusted.gpg.d/tur.gpg

Modernizing /data/data/com.termux/files/usr/etc/apt/sources.list.d/x11.list...

# Would write to: /data/data/com.termux/files/usr/etc/apt/sources.list.d/x11.sources
Types: deb
URIs: https://packages-cf.termux.dev/apt/termux-x11/
Suites: x11
Components: main 
Signed-By: 
Warning: Could not determine Signed-By for URIs: https://packages-cf.termux.dev/apt/termux-x11/, Suites: x11

Edit: gonna have to look into that, we'll probably wanna migrate the repo files.

@Biswa96
Copy link
Member

Biswa96 commented Apr 23, 2025

CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/lib/apt/methods/https": library "libseccomp.so" not found: needed by main executable

Probably, seccomp need to be removed from cmake https://salsa.debian.org/apt-team/apt/-/blob/3.0.0/CMakeLists.txt?ref_type=tags#L137

@TomJo2000
Copy link
Member Author

TomJo2000 commented Apr 23, 2025

CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/lib/apt/methods/https": library "libseccomp.so" not found: needed by main executable

Probably, seccomp need to be removed from cmake https://salsa.debian.org/apt-team/apt/-/blob/3.0.0/CMakeLists.txt?ref_type=tags#L137

It was missing as a dependency.
Works after I manually installed it.

@Biswa96
Copy link
Member

Biswa96 commented Apr 23, 2025

It was missing as a dependency.

libseccomp is still downloaded in CI and cmake picks it up.

@TomJo2000
Copy link
Member Author

TomJo2000 commented Apr 23, 2025

It was missing as a dependency.

libseccomp is still downloaded in CI and cmake picks it up.

Yes. I force pushed the branch to fix that.
https://github.com/termux/termux-packages/compare/52fdcd8e0051a4dc1272a58828fb8c89116bc542..8bd692dd9f45492681947d39f4938553113fab7a

@TomJo2000
Copy link
Member Author

I'm having some trouble wrapping my head around the new deb822 format for package sources (e.g. repos).
https://repolib.readthedocs.io/en/latest/deb822-format.html#deb822-style-format

If I run apt modernize-sources it converts all the $repo.list files into $repo.sources files
But there is still a $TERMUX__PREFIX/etc/apt/sources.list file (and it places a termux-main-stable.sources into sources.list.d).

# ~$ tree $TERMUX__PREFIX/etc/apt
/data/data/com.termux/files/usr/etc/apt
├── apt.conf.d
│   └── 50apt-file.conf
├── preferences.d
├── sources.list
├── sources.list.bak
├── sources.list.d
│   ├── root.list.bak
│   ├── root.sources
│   ├── termux-main-stable.sources
│   ├── tur.list.bak
│   ├── tur.sources
│   ├── x11.list.bak
│   └── x11.sources
├── sources.list.dpkg-old
├── trusted.gpg
└── trusted.gpg.d
    ├── 2096779623.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/2096779623.gpg
    ├── agnostic-apollo.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/agnostic-apollo.gpg
    ├── grimler.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/grimler.gpg
    ├── kcubeterm.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/kcubeterm.gpg
    ├── landfillbaby.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/landfillbaby.gpg
    ├── mradityaalok.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/mradityaalok.gpg
    ├── termux-autobuilds.gpg -> /data/data/com.termux/files/usr/share/termux-keyring/termux-autobuilds.gpg
    └── tur.gpg

5 directories, 20 files

And it's complaining about duplicates and missing Signed-By entries.

Checking availability of current mirror:
[*] https://packages-cf.termux.dev/apt/termux-main: ok
Hit:1 https://turdl.kcubeterm.com tur-packages InRelease                     
Hit:2 https://packages-cf.termux.dev/apt/termux-main stable InRelease
Hit:3 https://packages-cf.termux.dev/apt/termux-root root InRelease
Hit:4 https://packages-cf.termux.dev/apt/termux-x11 x11 InRelease
All packages are up to date.    
Warning: Target Packages (main/binary-aarch64/Packages) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Packages (main/binary-all/Packages) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Contents-deb (main/Contents-aarch64) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Contents-deb (main/Contents-all) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Packages (main/binary-aarch64/Packages) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Packages (main/binary-all/Packages) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Contents-deb (main/Contents-aarch64) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Warning: Target Contents-deb (main/Contents-all) is configured multiple times in /data/data/com.termux/files/usr/etc/apt/sources.list:1 and /data/data/com.termux/files/usr/etc/apt/sources.list.d/termux-main-stable.sources:1
Notice: Missing Signed-By in the sources.list(5) entry for 'https://packages-cf.termux.dev/apt/termux-main'
Notice: Missing Signed-By in the sources.list(5) entry for 'https://packages-cf.termux.dev/apt/termux-root'
Notice: Missing Signed-By in the sources.list(5) entry for 'https://packages-cf.termux.dev/apt/termux-x11'
Summary:                        
  Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 0

@TomJo2000
Copy link
Member Author

We'll probably need to change the apt sources handling in:

I'll prep a PR for termux-tools.

@TomJo2000
Copy link
Member Author

That's the repos moved over to deb822.

@TomJo2000
Copy link
Member Author

Also updated dpkg as part of this PR now.

@TomJo2000
Copy link
Member Author

dpkg and libapt-pkg-perl are now being built from tarballs provided from Debian's upstream GitLab instance.
This should help avoid build failures due to versions having been removed from http://ftp.debian.org/debian/pool/main/

@TomJo2000 TomJo2000 added the help wanted Help is wanted in order to solve the issue label May 4, 2025
Copy link
Member Author

@TomJo2000 TomJo2000 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This gets us up to date with master again and all packages building.

The already conducted code reviews should still hold.
So that only leaves the rollback plan as the final unfinished piece.

Actually, did we ever work out if we want to roll updating termux-tools to 1.47.0 into this PR as well?

Comment on lines +1 to +68
#!@TERMUX_PREFIX@/bin/sh
# shellcheck shell=dash

set -eu

is_installed() {
case "$(dpkg-query -W -f '${db:Status-Status}' "$1" 2>/dev/null)" in
'not-installed'|'config-files') return 1;;
esac
}

was_upgraded() {
case "$1" in
# Versions of the rebuilt packages prior to the Apt 3.x merge
'apt') OLD_VERSION='2.8.1-1';;
'dpkg') OLD_VERSION='1.22.6-1';;
'apt-file') OLD_VERSION='3.3';;
'libapt-pkg-perl') OLD_VERSION='0.1.40-10';;
'nala') OLD_VERSION='0.16.0';;
'synaptic') OLD_VERSION='0.91.7-1';;
'termux-tools') OLD_VERSION='1.46.0+really1.45.0';;
*) # How did we get here?
echo "Package '$1' isn't covered by this script."
return 1
;;
esac

INSTALLED_VERSION="$(dpkg-query -W -f '${Version}' "$1")"

dpkg --compare-versions "$INSTALLED_VERSION" le "$OLD_VERSION"
}

download_backup() {
PKG_NAME="$1"
was_upgraded "$PKG_NAME" || return 1

TERMUX_ARCH="@TERMUX_ARCH@"
OUTPUT_FILE"${TMPDIR:-@TERMUX_PREFIX@/tmp}/${PKG_NAME}_${OLD_VERSION}_${TERMUX_ARCH}.deb"
PKG_URL="$MIRROR_URL"
curl -L "$PKG_URL" -o "$OUTPUT_FILE"
}

downgrade() {
# Check that 'dpkg' is in a sane enough state to mark itself 'ok'
case "$(dpkg-query -W -f '${Status}' dpkg)" in
*' ok '*);;
*) # If 'dpkg' isn't in a known 'ok' state something has gone very wrong.
echo "Something is seriously wrong with 'dpkg'."
echo "Unable to proceed with automatic restore."
exit 1
;;
esac

for package in 'dpkg' 'apt' 'libapt-pkg-perl' 'apt-file' 'nala' 'synaptic' 'termux-tools'; do
echo "Checking: '$package'"

# Do we even have this package?
is_installed "$package" || continue

# Download the old DEB if needed
download_backup "$package"

done
# Force install the old version.
dpkg -i "$OUTPUT_FILE"
}

downgrade
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd appreciate some suggestions for the restore script.
I do not recall how far I got with it, but it isn't yet fully implemented.

Notably, the way we'd want to handle keeping the old versions of the packages in the PR around hasn't been hashed out yet, and the script isn't currently being installed as part of the apt package.

Copy link
Member

@robertkirkman robertkirkman Sep 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally, if the decision were up to me, I would prefer to treat apt 3.0+ as a normal rolling-release package upgrade and not include a "rollback script", which is (in my opinion) not idiomatic to the general philosophy of rolling-release distributions.

In other rolling-release distributions, there is an expectation that, if users do not already know how, but encounter any unfixable problem with the new package versions, users should learn how to manually build old packages on another system and perform the rollback manually by transferring and force-reinstalling the old package versions in order to fix their broken environment.

There have been many instances throughout history when a broken pacman has occurred for almost the entire user base of Arch Linux, and it has been necessary for users of Arch Linux to manually retrieve and force-reinstall an older pacman to recover.

I'm also not sure myself how to safely implement a "fully automated" rollback script of this kind in any rolling-release distribution, because, since the exact versions of dependencies in rolling-release distributions are never locked to any "baseline release" set of package versions that could be expected, it is, as far as I know, impossible to predict exactly what dependency-related errors will occur for any given user when force-reinstalling older package versions, and that is something that users just have to figure out on their own using standard problem-solving steps for rolling-release distributions.

However, if the decision is not up to me, then I would be happy to test any rollback script prototype on my devices once it is ready to run, and report the results, so that it could at least be a rollback script that has consistent and possibly-useful behavior, even if it's not possible for it to handle every single edge case that could occur.

Copy link
Member

@robertkirkman robertkirkman Sep 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Notably, the way we'd want to handle keeping the old versions of the packages in the PR around hasn't been hashed out yet

Arch Linux has an archive for all older packages of all older versions released anytime in the last several months or years.

That is actually part of Arch Linux's official wiki page documenting how to downgrade packages in Arch Linux.

however, the important reason that works in Arch Linux is because they actually store an archive of all their packages, not just a few, and unlike Debian sid and Termux, they don't delete old packages arbitrarily, but have many old packages in their archive going back a really long time.

That makes it simple for Arch Linux users to perform the process of manually rolling back packages and all their dependencies, since they can try the package first -> if the package at the version they need reports a runtime error because of incorrect dependencies, they can go find the dependencies at the needed versions in the package archive -> repeat,

The equivalent steps in Termux (since Termux does not archive all old packages) are:

  • to first download two clones of the termux-packages git repository
  • use git checkout to rollback one of the clones to the last commit that contained the desired package(s)
  • manually override the latest-clone with the needed packages copied and pasted from the rolled-back clone
  • build all of the desired old package versions using the scripts folder and other packages present in the latest-clone
  • and then transfer the newly-rebuilt old package versions to the Termux device where they are needed, and manually reinstall them there,
  • repeat until no more errors

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additionally skill set of average arch users and Termux users would be slightly different ;)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additionally skill set of average arch users and Termux users would be slightly different ;)

I agree, but part of my point is that fully-automated rollback scripts that handle every single possible edge-case are, as far as I know, impossible to implement in rolling-release distributions because of properties shared between all rolling-release distributions, so unless a "termux-packages 'release' package set for last apt 2.X" is made and fully backed up so that it can be treated as the "stable reference point" for rolling-back to (simulating/implementing the effects of a non-rolling-release distro), it might be impossible for users encountering any hypothetical issue with the apt package (or any other package bump, since the same considerations technically apply for any upgrade of any package in rolling-release distributions) to fix their issue without learning the troubleshooting and recovery steps that are shared between all rolling-release distributions.

Copy link
Member

@robertkirkman robertkirkman Sep 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do publish bootstraps which contain all dependencies of apt at snapshots confirmed to work going back for quite a while, here:

https://github.com/termux/termux-packages/releases

If a rollback script is important, maybe one of these could be selected and used as the download from which the script could extract and install a working copy of apt 2.X and its dependencies?

There could be other problems with that approach, but it's one idea since the bootstraps might represent functioning "releases" of all the necessary components to run apt 2.X (just not, unlike real non-rolling-release distros, any other packages that are not already included in the bootstraps, which could easily result in any non-bootstrap packages the user has installed becoming broken after the rollback, but maybe if the goal is recovery of apt alone, those aren't as important in the opinion of some - in my opinion, preserving the functionality of all other packages the user has installed is important, but others might disagree).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TL;DR of all I wrote is, that in my opinion, a "rollback script" in Termux is unlikely to work reliably and could easily cause more problems than it fixes, in a cascading whack-a-mole effect that the more hypothetical errors it attempts to fix, the more errors are likely to appear. Others might have other opinions.

Copy link
Member

@agnostic-apollo agnostic-apollo Sep 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracting package and dependencies from bootstraps would be too much work as they would exist as a prefix directory. It might be possible to create a pool-archive directory on the repo with all the required debs for apt and recursive dependencies that "currently exist", that state is currently working, that should be enough to restore, without running into dependency linking issues. It could break other packages that may rely on newer dependencies, but we could fix the apt 3.0 issue that was found and release an update, after which users could upgrade all packages using apt 2.0 to get all packages working.

The goal should be to provide a reasonable/basic recovery mechanism, not cater to every possibly scenario. The emergency-restore.sh.in looks fine from a quick look, would have to check it more closely and ensure all dependencies are restored, etc and change url to pool-archive, etc.

@robertkirkman
Copy link
Member

Actually, did we ever work out if we want to roll updating termux-tools to 1.47.0 into this PR as well?

Quoting @agnostic-apollo on may 27th in this thread:

A termux tools release can be made and version bumped in this PR and merged along with it.

#24212 (comment)

if the situation has changed since then and that comment no longer applies, agnostic-apollo could write an updated response to explain.

@robertkirkman
Copy link
Member

robertkirkman commented Sep 11, 2025

Some other notes regarding termux-tools

very minor changes to termux-tools that were requested by agnostic-apollo, tomjo2000 and me during review of previous termux-tools PRs, but which have not yet been applied:

very heavy changes to the behavior of pkg install that I made in response to a discussion started by twaik earlier in this thread: #24212 (comment). Should not be merged unless/until a large number of users organically seek out and desire the heavy behavior changes in order to fix the issue of termux-tools that the PR is marked as fixing:

@agnostic-apollo
Copy link
Member

if the situation has changed since then and that comment no longer applies, agnostic-apollo could write an updated response to explain.

Same as before, do it from here.

@robertkirkman
Copy link
Member

robertkirkman commented Sep 11, 2025

So that only leaves the rollback plan as the final unfinished piece.

actually there is some other review I might have for this PR about other stuff, but I have posted a lot of messages here recently, so to avoid spamming more text walls, I will wait until the other discussion topics are resolved before starting new discussions about other parts of the PR.

TomJo2000 and others added 2 commits November 1, 2025 03:45
Co-authored-by: Jia Yuan Lo <jylo06g@gmail.com>
Co-authored-by: Robert Kirkman <rkirkman@termux.dev>
Co-authored-by: Twaik Yont <9674930+twaik@users.noreply.github.com>
Co-authored-by: Jia Yuan Lo <jylo06g@gmail.com>
@TomJo2000 TomJo2000 force-pushed the apt-3.0.0 branch 2 times, most recently from 939e571 to 59637f0 Compare November 1, 2025 02:52
[1]: https://github.com/llvm/llvm-project/pull/90152

--- a/apt-pkg/cacheset.h
+++ b/apt-pkg/cacheset.h
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have discovered that NDK r29

appears that it will cause this patch to not be necessary anymore

@TomJo2000
Copy link
Member Author

It might be good to actually articulate this.
I'm putting this PR on hold until we have NDK 29 merged.

We can probably part this out into a couple different batches and do the apt bump as the final step if we want to take a more gradual approach to this instead of adding a bunch of important changes all at once with this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

help wanted Help is wanted in order to solve the issue tracker

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Package]: more of a package update request: APT 3.X Auto update failing for synaptic

9 participants