Skip to content

lists/migrate3x: Add provides and virtuals to pass migration

Karel Koci requested to merge migrate3x-cover-missing-packages into hbl

Blockers for this MR: https://gitlab.labs.nic.cz/turris/updater/updater/issues/193 https://gitlab.labs.nic.cz/turris/updater/updater/issues/231

Should fix user installed packages not being available in 4.0+ noted in https://gitlab.labs.nic.cz/turris/turris-os-packages/issues/344

We have problem of chicken and egg. To know if we can update we need to update updater but doing so we have to start updating system. The problem is that reverting to 3.x with new updater would be pretty hacky and is also not something we want. The common problem is that users install some packages with opkg and those are added to updater's /etc/updater/conf.d/opkg-auto.lua file. Updater is stuck when such package is no longer provided. Modifying given file is not ideal because user can have other files that are not automatically managed and running replacement scripts on them is not good idea. Instead it is better to ensure that update proceeds even if there is a request for package that is no longer in repository.

This commit adds two types of rules for packages that are not in Turris OS 4.0 compared to Turris OS 3.x. Fist rule is to convince updater that package exists but is effectively empty. That is done by marking package as virtual:

Package("NAME", { virtual = true })

Other rule is that package is somewhat replaced by some other package and we add temporally provide for missing package in to it:

Package("EXISTING", { provides = {"NAME"} })

This should push problems with requests for non-existing packages to last step of migration, that is after removal of tos3to4 package.

The list I worked on here was generated only for Omnia. Turris 1.x should be almost same and mostly just subset so this should be enough. First I downloaded all repositories indexes from 3.11.9 and from 4.0.1.

cd 3x
for repo in base hardware lucics management node openwisp packages php printing routing sidn telephony turrispackages; do curl https://repo.turris.cz/omnia/packages/$repo/Packages > $repo; done
cd ../4x
for repo in base core luci openwisp packages routing sidn telephony turrispackages; do curl https://repo.turris.cz/hbs/omnia/packages/$repo/Packages > $repo; done

Next step was to collect all package names.

cd ../3x
for repo in $(ls); do sed -n 's/Package: \(.*\)/\1/p' $repo; done | sort > ../3s
cd ../4x
for repo in $(ls); do sed -n 's/Package: \(.*\)/\1/p' $repo; done | sort > ../4s

And lastly diff was made for packages missing in 4s but present in 3s:

cd ..
diff --new-line-format="" --unchanged-line-format="" 3s 4s
Edited by Karel Koci

Merge request reports