Skip to content
  • Karel Koci's avatar
    9b6f3aea
    lists/migrate3x: Add provides and virtuals to pass migration · 9b6f3aea
    Karel Koci authored
    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
    9b6f3aea
    lists/migrate3x: Add provides and virtuals to pass migration
    Karel Koci authored
    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
Loading