pmbootstrap init: kernel selection / remove linux-pmos-lts (#1363)

* As discussed in IRC/matrix, we're removing `linux-postmarketos-lts`
  for now. The kernel isn't used right now, and we save lots of
  maintenance effort with not updating it every week or so.
* new config option `"kernel"` with possible values:
  `"downstream", "mainline", "stable"` (downstream is always
  `linux-$devicename`)
* ask for the kernel during `pmbootstrap init` if the device package
  has kernel subpackages and install it in `_install.py`
* postmarketos-mkinitfs: display note instead of exit with error when
  the `deviceinfo_dtb` file is missing (because we expect it to be
  missing for downstream kernels)
* device-sony-amami:
  * add kernel subpackages for downstream, mainline
  * set `deviceinfo_dtb`
* device-qemu-amd64: add kernel subpackages for stable, lts, mainline
* test cases and test data for new functions
* test case that checks all aports for right usage of the feature:
  * don't mix specifying kernels in depends *and* subpackages
  * 1 kernel in depends is maximum
  * kernel subpackages must have a valid name
  * Test if devices packages reference at least one kernel
* Remove `_build_device_depends_note()` which informs the user that
  `--ignore-depends` can be used with device packages to avoid building
  the kernel. The idea was to make the transition easier after a change
  we did months ago, and now the kernel doesn't always get built before
  building the device package so it's not relevant anymore.
* pmb/chroot/other.py:
  * Add autoinstall=True to kernel_flavors_installed(). When the flag
    is set, the function makes sure that at least one kernel for the
    device is installed.
  * Remove kernel_flavor_autodetect() function, wherever it was used,
    it has been replaced with kernel_flavors_installed()[0].
* pmb.helpers.frontend.py: remove code to install at least one kernel,
  kernel_flavors_installed() takes care of that now.
This commit is contained in:
Oliver Smith 2018-04-03 23:50:09 +00:00 committed by GitHub
parent b7d4e2c11e
commit b66b5dcc34
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 334 additions and 17042 deletions

View file

@ -44,41 +44,16 @@ import pmb.parse
import pmb.qemu
def _build_device_depends_note(args, pkgname):
"""
Previously 'pmbootstrap build device-...' built the device package in the
native chroot without installing its dependencies (e.g. armhf kernel!) and
created a symlink to all supported architectures.
Not installing depends while building is incompatible with how Alpine's
abuild does it, so we changed the behavior. Now pmbootstrap reads the
device's architecture from the deviceinfo file and automatically builds
for that architecture, if you did not specify any architecture. And the
dependencies get installed correctly before the build.
To make migration easier for the users, we show a hint if building a device
package was requested.
"""
# Only relevant for device packages when -i is not set
if not pkgname.startswith("device-") or getattr(args, "ignore_depends"):
return
device = pkgname.split("-", 1)[1]
logging.info("NOTE: " + device + "'s kernel will be installed as dependency"
" before building (old behavior: 'pmbootstrap build -i')")
def _parse_flavor(args):
"""
Verify the flavor argument if specified, or return a default value.
"""
# Make sure, that at least one kernel is installed
# Install at least one kernel and get installed flavors
suffix = "rootfs_" + args.device
pmb.chroot.apk.install(args, ["device-" + args.device], suffix)
flavors = pmb.chroot.other.kernel_flavors_installed(args, suffix)
# Parse and verify the flavor argument
flavor = args.flavor
flavors = pmb.chroot.other.kernel_flavors_installed(args, suffix)
if flavor:
if flavor not in flavors:
raise RuntimeError("No kernel installed with flavor " + flavor + "!" +
@ -116,11 +91,6 @@ def build(args):
if args.strict:
pmb.chroot.zap(args, False)
# Detect old usage for device- packages
if not args.ignore_depends:
for package in args.packages:
_build_device_depends_note(args, package)
# Set src and force
src = os.path.realpath(os.path.expanduser(args.src[0])) if args.src else None
force = True if src else args.force