Nala issues on Ubuntu Noble
Just upgraded my test server to Ubuntu Noble (24.04) and Nala 0.15.1 errors out on nala upgrade
I also noticed that apt update && apt upgrade
always results in:
The following packages will be DOWNGRADED:
nala
And it attempts to install nala 0.15.1 over 0.15.1
Get:1 https://deb.volian.org/volian scar/main amd64 nala all 0.15.1 [142 kB]
Fetched 142 kB in 1s (183 kB/s)
(Reading database ... 74883 files and directories currently installed.)
Preparing to unpack .../archives/nala_0.15.1_all.deb ...
Unpacking nala (0.15.1) over (0.15.1) ...
Setting up nala (0.15.1) ...
I tried uninstalling nala and all its deps, and reinstalling with the scar repo installed, but I get the same behavior.
Not sure if it's an issue that happened due to my upgrade to Noble or if it's a nala issue that manifests in Noble.
Thanks
PS. the nala upgrade
errors are likely due to the same downgrade attempt to the same nala version
Here's the traceback:
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /usr/lib/python3/dist-packages/nala/nala.py:347 in upgrade │
│ │
│ 344 │ │ auto_remover(cache, nala_pkgs) │
│ 345 │ │ get_changes(cache, nala_pkgs, "upgrade") │
│ 346 │ │
│ ❱ 347 │ _upgrade(exclude) │
│ 348 │
│ 349 │
│ 350 @nala.command(help=_("Install packages.")) │
│ │
│ ╭────────────────────────────────── locals ───────────────────────────────────╮ │
│ │ _upgrade = <function upgrade.<locals>._upgrade at 0x797ffdd440e0> │ │
│ │ assume_yes = None │ │
│ │ auto_remove = None │ │
│ │ color_force = None │ │
│ │ debug = None │ │
│ │ download_only = None │ │
│ │ dpkg_option = [] │ │
│ │ exclude = [] │ │
│ │ fix_broken = None │ │
│ │ full_upgrade = None │ │
│ │ install_recommends = None │ │
│ │ install_suggests = None │ │
│ │ man_help = None │ │
│ │ purge = None │ │
│ │ raw_dpkg = None │ │
│ │ remove_essential = None │ │
│ │ simple = None │ │
│ │ update = None │ │
│ │ verbose = None │ │
│ ╰─────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3/dist-packages/nala/nala.py:345 in _upgrade │
│ │
│ 342 │ │ │ ) │
│ 343 │ │ │
│ 344 │ │ auto_remover(cache, nala_pkgs) │
│ ❱ 345 │ │ get_changes(cache, nala_pkgs, "upgrade") │
│ 346 │ │
│ 347 │ _upgrade(exclude) │
│ 348 │
│ │
│ ╭─────────────────────────────── locals ────────────────────────────────╮ │
│ │ _upgrade = <function upgrade.<locals>._upgrade at 0x797ffdd440e0> │ │
│ │ cache = <nala.cache.Cache object at 0x797ffe591820> │ │
│ │ exclude = [] │ │
│ │ is_upgrade = () │ │
│ │ nested_cache = None │ │
│ │ protected = set() │ │
│ ╰───────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3/dist-packages/nala/install.py:476 in get_changes │
│ │
│ 473 │ if pkgs or nala_pkgs.local_debs or nala_pkgs.configure_pkgs: │
│ 474 │ │ check_essential(pkgs) │
│ 475 │ │ sort_pkg_changes(pkgs, nala_pkgs) │
│ ❱ 476 │ │ print_update_summary(nala_pkgs, cache) │
│ 477 │ │ check_term_ask() │
│ 478 │ │
│ 479 │ # Enable verbose and raw_dpkg if we're piped. │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ cache = <nala.cache.Cache object at 0x797ffe591820> │ │
│ │ nala_pkgs = PackageHandler( │ │
│ │ │ autoremoved=set(), │ │
│ │ │ user_explicit=[], │ │
│ │ │ local_debs=[], │ │
│ │ │ not_needed=[], │ │
│ │ │ delete_pkgs=[], │ │
│ │ │ install_pkgs=[], │ │
│ │ │ reinstall_pkgs=[], │ │
│ │ │ upgrade_pkgs=[], │ │
│ │ │ autoremove_pkgs=[], │ │
│ │ │ autoremove_config=[], │ │
│ │ │ delete_config=[], │ │
│ │ │ recommend_pkgs=[], │ │
│ │ │ suggest_pkgs=[], │ │
│ │ │ configure_pkgs=[], │ │
│ │ │ downgrade_pkgs=[ │ │
│ │ │ │ NalaPackage( │ │
│ │ │ │ │ name='nala', │ │
│ │ │ │ │ version='0.15.1', │ │
│ │ │ │ │ size=142168, │ │
│ │ │ │ │ old_version='0.15.1' │ │
│ │ │ │ ) │ │
│ │ │ ], │ │
│ │ │ held_pkgs=[] │ │
│ │ ) │ │
│ │ operation = 'upgrade' │ │
│ │ pkgs = [<Package: name:'nala' architecture='amd64' id:114308>] │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3/dist-packages/nala/summary.py:379 in print_update_summary │
│ │
│ 376 │ │ if not pkg_set: │
│ 377 │ │ │ continue │
│ 378 │ │ package_table = Table(header.title, padding=0, box=HORIZONTALS, expand=True) │
│ ❱ 379 │ │ package_table.add_row(gen_package_table(pkg_set, header)) │
│ 380 │ │ main_table.add_row(package_table) │
│ 381 │ │ # We don't need empty rows from these in the summary │
│ 382 │ │ if nala_pkgs.no_summary(pkg_set): │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ cache = <nala.cache.Cache object at 0x797ffe591820> │ │
│ │ header = PackageHeaders( │ │
│ │ │ layout=('pkg_yellow', 'old_version', 'new_version', 'pkg_size'), │ │
│ │ │ title='Downgrading', │ │
│ │ │ summary='Downgrade' │ │
│ │ ) │ │
│ │ headers = Headers( │ │
│ │ │ deleting=PackageHeaders( │ │
│ │ │ │ layout=('pkg_red', 'version', 'pkg_size'), │ │
│ │ │ │ title='Removing', │ │
│ │ │ │ summary='Remove' │ │
│ │ │ ), │ │
│ │ │ auto_removing=PackageHeaders( │ │
│ │ │ │ layout=('pkg_red', 'version', 'pkg_size'), │ │
│ │ │ │ title='Auto-Removing', │ │
│ │ │ │ summary='Auto-Remove' │ │
│ │ │ ), │ │
│ │ │ installing=PackageHeaders( │ │
│ │ │ │ layout=('pkg_green', 'version', 'pkg_size'), │ │
│ │ │ │ title='Installing', │ │
│ │ │ │ summary='Install' │ │
│ │ │ ), │ │
│ │ │ reinstalling=PackageHeaders( │ │
│ │ │ │ layout=('pkg_green', 'version', 'pkg_size'), │ │
│ │ │ │ title='Reinstalling', │ │
│ │ │ │ summary='Reinstall' │ │
│ │ │ ), │ │
│ │ │ upgrading=PackageHeaders( │ │
│ │ │ │ layout=('pkg_blue', 'old_version', 'new_version', 'pkg_size'), │ │
│ │ │ │ title='Upgrading', │ │
│ │ │ │ summary='Upgrade' │ │
│ │ │ ), │ │
│ │ │ downgrading=PackageHeaders( │ │
│ │ │ │ layout=( │ │
│ │ │ │ │ 'pkg_yellow', │ │
│ │ │ │ │ 'old_version', │ │
│ │ │ │ │ 'new_version', │ │
│ │ │ │ │ 'pkg_size' │ │
│ │ │ │ ), │ │
│ │ │ │ title='Downgrading', │ │
│ │ │ │ summary='Downgrade' │ │
│ │ │ ), │ │
│ │ │ configuring=PackageHeaders( │ │
│ │ │ │ layout=('pkg_magenta', 'version', 'pkg_size'), │ │
│ │ │ │ title='Configuring', │ │
│ │ │ │ summary='Configure' │ │
│ │ │ ), │ │
│ │ │ recommending=PackageHeaders( │ │
│ │ │ │ layout=('pkg_magenta', 'version', 'pkg_size'), │ │
│ │ │ │ title='Recommended, Will Not Be Installed', │ │
│ │ │ │ summary='' │ │
│ │ │ ), │ │
│ │ │ suggesting=PackageHeaders( │ │
│ │ │ │ layout=('pkg_magenta', 'version', 'pkg_size'), │ │
│ │ │ │ title='Suggested, Will Not Be Installed', │ │
│ │ │ │ summary='' │ │
│ │ │ ), │ │
│ │ │ held_pkgs=PackageHeaders( │ │
│ │ │ │ layout=( │ │
│ │ │ │ │ 'pkg_yellow', │ │
│ │ │ │ │ 'old_version', │ │
│ │ │ │ │ 'new_version', │ │
│ │ │ │ │ 'pkg_size' │ │
│ │ │ │ ), │ │
│ │ │ │ title='Kept Back, Will Not Be Upgraded', │ │
│ │ │ │ summary='Kept Back' │ │
│ │ │ ), │ │
│ │ │ not_needed=PackageHeaders( │ │
│ │ │ │ layout=('pkg_red', 'version', 'pkg_size'), │ │
│ │ │ │ title='Auto-Removable, Will Not Be Removed', │ │
│ │ │ │ summary='' │ │
│ │ │ ) │ │
│ │ ) │ │
│ │ main_table = <rich.table.Table object at 0x797ffacbe7b0> │ │
│ │ nala_pkgs = PackageHandler( │ │
│ │ │ autoremoved=set(), │ │
│ │ │ user_explicit=[], │ │
│ │ │ local_debs=[], │ │
│ │ │ not_needed=[], │ │
│ │ │ delete_pkgs=[], │ │
│ │ │ install_pkgs=[], │ │
│ │ │ reinstall_pkgs=[], │ │
│ │ │ upgrade_pkgs=[], │ │
│ │ │ autoremove_pkgs=[], │ │
│ │ │ autoremove_config=[], │ │
│ │ │ delete_config=[], │ │
│ │ │ recommend_pkgs=[], │ │
│ │ │ suggest_pkgs=[], │ │
│ │ │ configure_pkgs=[], │ │
│ │ │ downgrade_pkgs=[ │ │
│ │ │ │ NalaPackage( │ │
│ │ │ │ │ name='nala', │ │
│ │ │ │ │ version='0.15.1', │ │
│ │ │ │ │ size=142168, │ │
│ │ │ │ │ old_version='0.15.1' │ │
│ │ │ │ ) │ │
│ │ │ ], │ │
│ │ │ held_pkgs=[] │ │
│ │ ) │ │
│ │ package_table = <rich.table.Table object at 0x797ffacbe900> │ │
│ │ pkg_set = [ │ │
│ │ │ NalaPackage( │ │
│ │ │ │ name='nala', │ │
│ │ │ │ version='0.15.1', │ │
│ │ │ │ size=142168, │ │
│ │ │ │ old_version='0.15.1' │ │
│ │ │ ) │ │
│ │ ] │ │
│ │ summary_header = <rich.table.Table object at 0x797ffacbe810> │ │
│ │ summary_table = <rich.table.Table object at 0x797ffacbe8d0> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3/dist-packages/nala/summary.py:340 in gen_package_table │
│ │
│ 337 │ │ │ or_deps.append(pkg) │
│ 338 │ │ │ continue │
│ 339 │ │ if pkg.old_version: │
│ ❱ 340 │ │ │ package_table.add_row(*get_rows(pkg, pkg_headers.layout)) │
│ 341 │ │ │ continue │
│ 342 │ │ package_table.add_row(*get_rows(pkg, pkg_headers.layout)) │
│ 343 │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ nala_packages = [ │ │
│ │ │ NalaPackage( │ │
│ │ │ │ name='nala', │ │
│ │ │ │ version='0.15.1', │ │
│ │ │ │ size=142168, │ │
│ │ │ │ old_version='0.15.1' │ │
│ │ │ ) │ │
│ │ ] │ │
│ │ or_deps = [] │ │
│ │ package_table = <rich.table.Table object at 0x797ffacbe930> │ │
│ │ pkg = NalaPackage( │ │
│ │ │ name='nala', │ │
│ │ │ version='0.15.1', │ │
│ │ │ size=142168, │ │
│ │ │ old_version='0.15.1' │ │
│ │ ) │ │
│ │ pkg_headers = PackageHeaders( │ │
│ │ │ layout=( │ │
│ │ │ │ 'pkg_yellow', │ │
│ │ │ │ 'old_version', │ │
│ │ │ │ 'new_version', │ │
│ │ │ │ 'pkg_size' │ │
│ │ │ ), │ │
│ │ │ title='Downgrading', │ │
│ │ │ summary='Downgrade' │ │
│ │ ) │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3/dist-packages/nala/summary.py:170 in get_rows │
│ │
│ 167 │ """Get the rows from our row map.""" │
│ 168 │ for key in layout: │
│ 169 │ │ if key == "new_version": │
│ ❱ 170 │ │ │ yield from_ansi(version_diff(pkg)) │
│ 171 │ │ │ continue │
│ 172 │ │ if key == "color": │
│ 173 │ │ │ continue │
│ │
│ ╭──────────────────────────────────────── locals ────────────────────────────────────────╮ │
│ │ key = 'new_version' │ │
│ │ layout = ('pkg_yellow', 'old_version', 'new_version', 'pkg_size') │ │
│ │ pkg = NalaPackage(name='nala', version='0.15.1', size=142168, old_version='0.15.1') │ │
│ ╰────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3/dist-packages/nala/summary.py:190 in version_diff │
│ │
│ 187 │ # If there isn't a revision these shouldn't ever match │
│ 188 │ # If they do match then only the revision has changed │
│ 189 │ if old_ver[0] == new_ver[0]: │
│ ❱ 190 │ │ return f"{new_ver[0]}-{color(new_ver[1], 'YELLOW')}" │
│ 191 │ │
│ 192 │ # Split both version strings. Example "1.12.3" = ["1", "12", "3"] │
│ 193 │ old_ver = pkg.old_version.split(".", 2) │
│ │
│ ╭──────────────────────────────────────── locals ─────────────────────────────────────────╮ │
│ │ new_ver = ['0.15.1'] │ │
│ │ old_ver = ['0.15.1'] │ │
│ │ pkg = NalaPackage(name='nala', version='0.15.1', size=142168, old_version='0.15.1') │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
IndexError: list index out of range