In-place upgrade of distromorphed Kicksecure 17 with wrong meta package

Original post

I have a Kicksecure 17 VPS initially setup via distromorphing. I just did a test run with this to update other VPS and slowly update all systems to Qubes 4.3, the new Kicksecure and Whonix versions.

The VPS is barely modified whatsoever.

The system is fully up to date according to sudo apt update, systemcheck doesn’t report anything major, release-upgrade is version 3.3 but running sudo release-upgrade results in this error:

+ old_meta_package=
+ new_meta_package=
+ '[' '' = '' ']'
+ true 'ERROR: no installed meta package detected!'

However, I do have the old meta package installed and the upgrade guide does not mention installing a different one manually:

ii  kicksecure-cli-host                      3:32.3-1                       all          Kicksecure Host command line interface CLI

(Shouldn’t have been host probably, but that’s besides the point).

Assuming it was missing in the docs, I just tried installing one of the new meta packages, which says that it’s not found:

sudo apt install kicksecure-vm-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package kicksecure-vm-server
zsh: exit 100   sudo apt install kicksecure-vm-server

Docs: https://www.kicksecure.com/wiki/Release_Upgrade_17_to_18

Where is my mistake?

Edit: Looking at the full log, it never checks for the old meta package I installed because it detects a VM and I installed the baremetal package back then. What would my options be? Execute the steps the tool does manually? Reinstalling is not an option because of the amount of data on it.

Can I download this file, update the VM check variable and then just run it with sudo and achieve the same result?

https://raw.githubusercontent.com/Kicksecure/legacy-dist/refs/heads/master/usr/sbin/release-upgrade

+ meta_package_detect
+ '[' '!' '' = '' ']'
+ test -e /usr/share/qubes/marker-vm
+ test -e /usr/share/whonix/marker
+ test -e /usr/share/kicksecure/marker
+ '[' kvm = none ']'
+ old_meta_package=kicksecure-xfce-vm
+ new_meta_package=kicksecure-vm-gui-lxqt
+ meta_package_installed_check
+ pkg_installed kicksecure-xfce-vm
+ local package_name dpkg_query_output
+ local requested_action status error_state
+ package_name=kicksecure-xfce-vm
++ dpkg-query --show '--showformat=${Status}' kicksecure-xfce-vm
+ dpkg_query_output=
+ true
++ printf %s ''
++ awk '{print $1}'
+ requested_action=
++ printf %s ''
++ awk '{print $2}'
+ status=
++ printf %s ''
++ awk '{print $3}'
+ error_state=
+ '[' '' = install ']'
+ true '/usr/sbin/release-upgrade: INFO: kicksecure-xfce-vm is not installed, ok.'
+ return 1
+ pkg_installed kicksecure-vm-gui-lxqt
+ local package_name dpkg_query_output
+ local requested_action status error_state
+ package_name=kicksecure-vm-gui-lxqt
++ dpkg-query --show '--showformat=${Status}' kicksecure-vm-gui-lxqt
+ dpkg_query_output=
+ true
++ printf %s ''
++ awk '{print $1}'
+ requested_action=
++ printf %s ''
++ awk '{print $2}'
+ status=
++ printf %s ''
++ awk '{print $3}'
+ error_state=
+ '[' '' = install ']'
+ true '/usr/sbin/release-upgrade: INFO: kicksecure-vm-gui-lxqt is not installed, ok.'
+ return 1
+ return 1
+ old_meta_package=kicksecure-cli-vm
+ new_meta_package=kicksecure-vm-cli
+ meta_package_installed_check
+ pkg_installed kicksecure-cli-vm
+ local package_name dpkg_query_output
+ local requested_action status error_state
+ package_name=kicksecure-cli-vm
++ dpkg-query --show '--showformat=${Status}' kicksecure-cli-vm
+ dpkg_query_output=
+ true
++ printf %s ''
++ awk '{print $1}'
+ requested_action=
++ printf %s ''
++ awk '{print $2}'
+ status=
++ printf %s ''
++ awk '{print $3}'
+ error_state=
+ '[' '' = install ']'
+ true '/usr/sbin/release-upgrade: INFO: kicksecure-cli-vm is not installed, ok.'
+ return 1
+ pkg_installed kicksecure-vm-cli
+ local package_name dpkg_query_output
+ local requested_action status error_state
+ package_name=kicksecure-vm-cli
++ dpkg-query --show '--showformat=${Status}' kicksecure-vm-cli
+ dpkg_query_output=
+ true
++ printf %s ''
++ awk '{print $1}'
+ requested_action=
++ printf %s ''
++ awk '{print $2}'
+ status=
++ printf %s ''
++ awk '{print $3}'
+ error_state=
+ '[' '' = install ']'
+ true '/usr/sbin/release-upgrade: INFO: kicksecure-vm-cli is not installed, ok.'
+ return 1
+ return 1
+ old_meta_package=
+ new_meta_package=
+ '[' '' = '' ']'
+ true 'ERROR: no installed meta package detected!'
+ exit 1
zsh: exit 1     sudo release-upgrade

The VPS is KVM based. We don’t consider this a “host”.

This results in condition if [ "${virt_mode}" = 'none' ]; then to evaluate as false. Hence only this code block is applicable:

         else
            old_meta_package=kicksecure-xfce-vm
            new_meta_package=kicksecure-vm-gui-lxqt
            if meta_package_installed_check ; then return 0 ; fi
            old_meta_package=kicksecure-cli-vm
            new_meta_package=kicksecure-vm-cli
            if meta_package_installed_check ; then return 0 ; fi
         fi

In plain English, only old meta package kicksecure-xfce-vm or kicksecure-cli-vm would be acceptable.

Thanks for the fast reply. I had debugged this and updated the original post with a question on how to proceed if you could give it a quick look :slight_smile:

tl;dr: Can I download https://raw.githubusercontent.com/Kicksecure/legacy-dist/refs/heads/master/usr/sbin/release-upgrade, change the check and just run the file?

You could probably edit the file on the disk. All that the function call to meta_package_detect does is set two variables:

  • old_meta_package
  • new_meta_package

So if you know what you’re doing you could out comment the meta_package_detect function and instead set the values of these variables manually in place where meta_package_detect is now.

You could modify the script or do the same things manually indeed. I would recommend the script has doing that by hand could be more cumbersome and error-prone.

1 Like