Skip to content
Release 3.2.0

This release or newer is required for postmarketOS + systemd, now that
it has been merged into master:
https://postmarketos.org/edge/2025/01/09/systemd-soon/

Besides systemd related changes, notably "pmbootstrap flasher boot" now
works for fastboot-bootpart. Also the android recovery zip and aportgen
features have been fixed, along with some smaller fixes and a LOT of
code quality improvements that will make future maintenance easier.

Huge thanks to everybody who has contributed to this release! <3

Features:
* install: support systemd for disabling services (MR 2529)
* pmb.config.pmaports: Make pmbootstrap automatically switch away from
  master_staging_systemd (MR 2528)
* Rewrite repo_missing for bpo + systemd split repo (MR 2410)
* pmb/config: enable "flasher boot" for fastboot-bootpart (MR 2508)

Fixes:
* pmb.chroot.binfmt: Initialise chroot before installing packages in register() (MR 2526)
* pmb.parse.bootimg: Initialise chroot before installing packages in bootimg() (MR 2526)
* pmb.config.other: Don't require selected UI package to exist (MR 2530)
* Fix pmbootstrap install --android-recovery-zip (MR 2527)
* helpers.run.core.add_proxy_env_vars: fix variables (MR 2525)
* pmb.build.other: Fix broken f-string (MR 2525)
* repo_missing: if abuild is forked, add it as dep (MR 2410)
* pmb.aportgen: Update APKINDEX for relevant arch before parsing it (MR 2509)
* pmb.flasher.frontend: detect lk2nd as subpackage dependency (MR 2511)

Other:
* pmb.helpers.ui: Add must_exist argument to check_option() (MR 2530)
* pmb.qemu.run: Remove FIXME and type ignore stuff from command_qemu() (MR 2522)
* pmb.types: Fix type for PmbArgs.output (MR 2522)
* pmb.build.autodetect: Remove FIXME about type hinting arch (MR 2522)
* CI: Install Ruff from PyPi instead of Alpine (MR 2525)
* pmb: Reformat with Ruff 0.9 (MR 2525)
* pmb.install: Remove unnecessary calls to round() (MR 2525)
* pmb.config.init: Simplify removal of select from providers_cfg (MR 2525)
* pmb.helpers.aportupgrade: Remove unnecessary regex (MR 2525)
* pmb: Use raw strings for regexes (MR 2525)
* pmb.chroot.apk: Use unpacking operator to create command in install_run_apk() (MR 2525)
* pyproject.toml: Enable most RUF checks (MR 2525)
* pmb: Use unpacking operator to concatenate collections (MR 2525)
* pmb.core.config: Add note about aports variable being class variable (MR 2525)
* pmb.core.config: Mark mirrors and providers as class variables (MR 2525)
* pmb.helpers.locale: Use frozenset for primary_layouts (MR 2525)
* pmb.build._package: Replace sum() with functools.reduce() (MR 2525)
* pmb.commands.repo_bootstrap: Remove unnecessary noqa comment (MR 2525)
* pmb.helpers.run_core: Remove unnecessary str(...) (MR 2525)
* pmb: Replace list(...)[0] with next(iter(...)) (MR 2525)
* install: merge disable_sshd(), disable_firewall() (MR 2529)
* Cosmetic: pmb/install/_install.py: tweak strings (MR 2529)
* Update systemd repo URL
* pmb.core.test_pkgrepo: Remove reference to master_staging_systemd (MR 2528)
* docs: use pmOS green color in html output (MR 2520)
* editorconfig: new file (MR 2520)
* pyproject.toml: Enable Ruff preview (MR 2516)
* pyproject.toml: Add CPY001 to Ruff linting (MR 2516)
* docs, pmb: Add missing copyright headers (MR 2516)
* pmb.parse.version: Use _ for "value" variable in validate() (MR 2516)
* CI: Simplify Ruff check (MR 2517)
* pmb.parse.version: Replace token_value() with Token enum (MR 2518)
* pmb.config.pmaports: Get rid of cast hack for SectionProxy (MR 2519)
* pyproject.toml: Set disallow_untyped_calls = true (MR 2514)
* pyproject.toml: Set disallow_untyped_defs = true (MR 2514)
* pmb: Add more types and fix type errors (MR 2514)
* pmb.parse.arguments: Type hint and remove unused arguments from add_kernel_arg() (MR 2514)
* pmb.parse.arguments: Ignore attr-defined on arg.completer (MR 2514)
* pmb.parse.test_version: Add unit tests for version.py (MR 2514)
* pmb.parse.version: Convert rest[0] to integer before storing it in value (MR 2514)
* pmb.parse.version: Link to older apk-tools (MR 2514)
* pmb: Add more type hints (MR 2513)
* pmb.qemu.run: Fix odd strings (MR 2513)
* docs: fix typos (MR 2510)
* pmb.aportgen: Unify tempdir preparation and checksum generation (MR 2509)
* pmb: Add more type hints (MR 2490)
* pmb.aportgen: Annotate <options> as AportGenEntry in generate() (MR 2490)
* pmb.helpers.repo_missing: Use f-string in get_relevant_packages() (MR 2490)
* pmb/helpers/repo_missing: Remove <arch> from filter_aport_packages() docstring (MR 2490)
* pmb.commands.pull: Remove bool return type from run() (MR 2490)
* pmb.config.init: Use separate answer variable for sudo timer (MR 2490)
* pmb.config.init: Explicitly convert string to int for config.extra_space (MR 2490)
* pmb.config.init: Fix types in ask_for_systemd() (MR 2490)
* pmb.config.init: Fix types in ask_for_work_path() (MR 2490)
* pmb.parse.kconfig: Rename options to arch_options in check_config_options_set (MR 2490)
* pmb.parse.kconfig.check_config_options_set: Update docstring (MR 2490)
* pmb.helpers.http: Simplify retrieve_json() (MR 2490)
* Fix spelling "infront" -> "in front"