work dir v4: delete invalid armhf triplet pkgs (!1801)

Alpine's abuild has a arch_to_hostspec function, which translates an
architecture name ("x86_64") to a hostspec triplet
("x86_64-alpine-linux-musl"). We are using this function in some
APKBUILDs in pmaports.git. The triplet had been changed in [1] and
now we must rebuild all relevant packages, or we will run into weird
issues like [2].

As some of these packages are generated with "pmbootstrap aportgen",
we can't simply bump the pkgrel and force a rebuild. That would break
the upstream compatibility checks, which rely on pkgver and pkgrel
being the same as the originating packages from Alpine.

Create a new workdir version with a migration that zaps the chroots and
deletes the affected package versions from the cache. Before this gets
merged, I will rebuild the affected packages in the binary package
repository, so pmbootstrap will always use the fixed packages after the
migration.

[1] https://github.com/alpinelinux/abuild/pull/56
[2] https://gitlab.com/postmarketOS/pmaports/issues/295
This commit is contained in:
Oliver Smith 2019-07-10 21:30:47 +02:00
parent 2c4dae736a
commit a9abfb66f9
No known key found for this signature in database
GPG Key ID: 5AE7F5513E0885CB
2 changed files with 45 additions and 1 deletions

View File

@ -45,7 +45,7 @@ pmaports_min_version = "4"
# Version of the work folder (as asked during 'pmbootstrap init'). Increase
# this number, whenever migration is required and provide the migration code,
# see migrate_work_folder()).
work_version = 3
work_version = 4
# Keys saved in the config file (mostly what we ask in 'pmbootstrap init')
config_keys = ["ccache_size", "device", "extra_packages", "hostname", "jobs",

View File

@ -16,6 +16,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
"""
import glob
import logging
import os
import re
@ -75,6 +76,24 @@ def check_binfmt_misc(args):
" armhf on x86_64):\n See: <" + link + ">")
def delete_apk(args, pkgname, version):
"""
Remove a cached binary package for all arches.
:param pkgname: package name (e.g. "binutils-armhf")
:param version: $pkgver-r$pkgrel (e.g. "1.0.0-r2")
"""
pattern = args.work + "/cache_apk_*/" + pkgname + "-" + version + ".*.apk"
matches = glob.glob(pattern)
logging.info("(native) Removing package: " + pkgname + "-" + version)
if not matches:
logging.info("(native) (Package not found, nothing to do.)")
return
for match in matches:
logging.info("(native) % rm " + match)
pmb.helpers.run.root(args, ["rm", match])
def migrate_success(args, version):
logging.info("Migration to version " + str(version) + " done")
with open(args.work + "/version", "w") as handle:
@ -154,6 +173,31 @@ def migrate_work_folder(args):
migrate_success(args, 3)
current = 3
if current == 3:
logging.info("Changelog:")
logging.info("* armhf triplet was changed in abuild (pmaports#295)")
logging.info("Migration will do the following:")
logging.info("* Zap your chroots")
logging.info("* Delete invalid armhf packages from cache")
logging.info("Note:")
logging.info("* If you are getting strange compiling errors when")
logging.info(" compiling to armhf (and other arches work fine!),")
logging.info(" then the invalid packages are probably still")
logging.info(" cached in your network. In that case, ask in the chat")
logging.info(" for advice: https://postmarketos.org/chat")
if not pmb.helpers.cli.confirm(args):
raise RuntimeError("Aborted.")
pmb.chroot.zap(args, False)
delete_apk(args, "binutils-armhf", "2.31.1-r2")
delete_apk(args, "busybox-static-armhf", "1.30.1-r2")
delete_apk(args, "gcc-armhf", "8.3.0-r0")
delete_apk(args, "gcc4-armhf", "9999-r1")
delete_apk(args, "gcc6-armhf", "9999-r6")
delete_apk(args, "musl-armhf", "1.1.22-r2")
migrate_success(args, 4)
current = 4
# Can't migrate, user must delete it
if current != required:
raise RuntimeError("Sorry, we can't migrate that automatically. Please"