Commit graph

3341 commits

Author SHA1 Message Date
Newbyte
a1057c9770
pmb.config.__init__: Add escape sequence for magenta text
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2549
2025-05-25 19:26:57 +02:00
Newbyte
c426c14f47
pmb.helpers.pmaports: Clean up some strings
Use f-strings to make them easier to read and combine some not-so-long
ones into one line for easier grepping.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2549
2025-05-25 19:26:52 +02:00
Newbyte
5783d1c507
Prepare 3.4.1 release 2025-05-25 15:13:41 +02:00
Clayton Craft
f4001310f2
pmb.qemu.run: command_qemu: refactor applying arch-specific options
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2560
2025-05-25 12:05:56 +02:00
Clayton Craft
b214fa6c4a
pmb.qemu.run: add support for EFI on aarch64
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2560
2025-05-25 12:05:56 +02:00
Clayton Craft
4a7ec11f4c
pmb.qemu.run: use virgl on aarch64 hosts
This enables faster/more featureful 3D accel support in VMs, which is necessary
for running some future UIs.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2560
2025-05-25 12:05:56 +02:00
Oliver Smith
cdb51686c3
CI: fix coverage regex
Use exactly the same regex as in BPO where this works.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2609
2025-05-25 11:55:27 +02:00
Pablo Correa Gómez
7ca76314cd
ci: add test coverage to the GitLab UI
This is a small nit, but allows to see the coverage percentage change
across MRs. It gives a small dopamine boost to see an MR you sent has
tests and made a small impact in the overall coverage :)

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2596
2025-05-25 11:48:33 +02:00
Alexey Andreyev
8f564edd78
docs/mirrors: mention env variables example
Mention Environment Variables section too

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2598
2025-05-25 11:44:14 +02:00
Alexey Andreyev
383266a7a8
docs/index: update local deploy example with pmb.ci
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2599
2025-05-25 11:42:01 +02:00
Alexey Andreyev
a61fd50d6f
docs/index: introduce local deploy example
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2599
2025-05-25 11:42:01 +02:00
Stefan Hansson
abb8d92437
Revert "CI: ruff: use 0.11.0 (Cannot use star annotation)"
The bug has been fixed upstream for a while now.

This reverts commit aced51132c

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2600
2025-05-25 11:39:14 +02:00
Stefan Hansson
da3fa09ca2
pmb.helpers.apk: Avoid concatenation
Appeases Ruff.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2600
2025-05-25 11:39:14 +02:00
Stefan Hansson
017522382f
pmb.config.init: Use heapq for sorting timings
This works because heapq sorts based on the first value in tuples
and heap[0] always is the smallest element.

See:
 - https://docs.python.org/2/library/heapq.html#basic-examples
 - https://docs.python.org/3/library/heapq.html

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2582
2025-05-25 11:37:12 +02:00
J. Neuschäfer
5c03cdd37f
pmb.arch: Add support for s390x
This commit adds s390x to the list of supported architectures, to allow
users/developers to experiment with it.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2536
2025-05-25 11:32:01 +02:00
Newbyte
0d672a7dc7
pmb.qemu.run: Use NonBugError for invalid device selection error
This eliminates all noise and results in an output that only contains
the actual relevant and helpful error message.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2603
2025-05-25 11:30:21 +02:00
Clayton Craft
226eeed6ff
ci: only run integration tests when there are code changes
This prevents running the integration tests, which cause load on the CI
and take time, when the change is unrelated to pmb functionality (e.g.
documentation updates).

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2608
2025-05-25 11:28:51 +02:00
Newbyte
15007e17d2
pmb.helpers.pmaports: Add must_exist to cache signature for find()
As must_exist affects the return value of this function by changing it
from returning None to raising an exception, we need to include it in
the cache key. Otherwise, the must_exist value effectively gets "stuck"
on whatever value it was set to when the given cache key was created.

This causes weird issues, see [1] and [2]. As such, include it in the
cache signature to fix this.

 [1]: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2601
 [2]: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6507#note_481093

Supersedes https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2601
Closes https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/issues/2610

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2604
2025-05-25 11:18:01 +02:00
Clayton Craft
740a5717d9
ci: only run markdown lint if markdown files are changed
This prevents running md linting in MRs where unrelated files are
changing, since the markdownlint tool could be upgraded to add new tests
that start failing and make these unrelated MRs unmergeable.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2606
2025-05-23 09:35:43 -07:00
Newbyte
75bc105605
CONTRIBUTING.md, README.md: Use descriptive links
Markdownlint complained about the links not being descriptive enough for
accesibility purposes, so make them actually describe what we're linking
to.

Alternative to https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2602

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2605
[ci:skip-build]: already built successfully in CI
2025-05-21 23:13:59 +02:00
Stefan Hansson
aebf99e988
Prepare 3.4.0 release 2025-05-13 19:42:56 +02:00
Pablo Correa Gómez
ba6bb4272d
pmb.parse.apkindex: account for provider_priority when locating packages
This fixes an issue where the local apk index has two packages in it
that provide the same thing, but this function was returning only the
one with the shortest name... which could be very bad :)

https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6475#note_480167

In the process, add tests for pmb.parse.apkindex.package function. Some of
the tests would fail without this patch, surfacing a bug where priorities
are not considered, but should, and that we are now fixing.

Co-authored-by: Clayton Craft <craftyguy@postmarketos.org>
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2594
2025-05-13 19:19:00 +02:00
slonkazoid
71f01ddbeb
pmb.core.config: remove +1 from nproc defaults
Since Linux has switched to EEVDF[1], the $(($(nproc)+2)) hack is no
longer faster. The new scheduler is way more efficient and performs
better with only `nproc` threads.

 [1]: https://docs.kernel.org/scheduler/sched-eevdf.html

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2595
2025-05-11 17:28:35 +02:00
Luca Weiss
0bca7555d7
pmb.netboot: Initialize chroot before checking path in chroot
Otherwise with zapped chroots, the check will fail and pmbootstrap won't
be able to locate the netboot image.

Fixes: d01f6b90 ("pmb.netboot: Only attempt to install nbd after rootfs existance check (MR 2540)")

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2583
2025-05-08 23:14:05 +02:00
Oliver Smith
2177271fc8
build: fix duplicate install messages
Since cross-native2 was introduced, pmbootstrap now tells the user which
host and which build dependencies are getting installed. This makes
sense if they get installed into separate chroots, but not if they get
installed into the same chroot:

	$ pmbootstrap build hello-world-wrapper --force
	[16:47:19] Building 1 package
	[16:47:19]    * edge/hello-world-wrapper
	[16:47:19] => (1/1) edge/hello-world-wrapper: Installing dependencies
	[16:47:19] *** Install host dependencies
	[16:47:19] (native) install hello-world
	[16:47:20] *** Install build dependencies
	[16:47:20] (native) install hello-world
	[16:47:22] => edge/hello-world-wrapper: Building package

Don't list the depends separately if we are installing them into the
same chroot:

	$ pmbootstrap build hello-world-wrapper --force
	[16:51:35] Building 1 package
	[16:51:35]    * edge/hello-world-wrapper
	[16:51:35] => (1/1) edge/hello-world-wrapper: Installing dependencies
	[16:51:35] (native) install hello-world
	[16:51:36] => edge/hello-world-wrapper: Building package

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2589
2025-05-08 22:45:18 +02:00
Anri Dellal
d7b12d98e6
pmb: Rename pmb:gpu-accel and deviceinfo_gpu_accelerated
pmb:gpu-accel -> pmb:drm
deviceinfo_gpu_accelerated -> deviceinfo_drm

Allow deviceinfo_gpu_accelerated as deprecated property

Keep pmb:gpu-accel as valid option to avoid failures for older branches
of pmaports.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2591
2025-05-08 17:33:11 +02:00
Pablo Correa Gómez
496d1b657d
Revert "install: openrc: fix installing alpine-base early"
This reverts commit 6eb8cab84d.

This is a problematic way to solve the issue. We want to eventually
allow people to migrate from openrc, and having alpine-base in the
world file is an issue. Moreover, a package that runs rc-update
and doesn't depend on openrc simply has a packaging bug. This is
something that is documented, and should be generally fixed
(https://gitlab.postmarketos.org/postmarketOS/pmaports/-/issues/2097).
If we manage to detect more issues, we should fix them in packaging
instead, like with
https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6474

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2593
2025-05-05 21:58:17 +02:00
Oliver Smith
b982e45c8d
pmb.build.package: fix strict mode
In strict mode, pmbootstrap uninstalls packages between builds. This was
broken since we switched from installing dependencies via abuild to
pmbootstrap since our code doesn't use "--virtual .makedepends-…" when
installing the makedepends:

  (088776) [15:32:34] (native) % cd /home/pmos/build; busybox su pmos -c SUDO_APK='abuild-apk --no-progress' HOME=/home/pmos abuild undeps ;
  ERROR: No such package: .makedepends-systemd-stage0

Instead of restoring the logic and worrying about uninstalling deps in
the right chroots, just zap all chroots in strict mode.

I've also considered implementing "--virtual .makedepends-…" again, but
running zap on the chroots makes the logic much simpler, is easier to
maintain and makes so little speed difference that it is worth the
trade-off. We don't need to pass additional parameters fore the 2nd
chroot to zap in cross-native2, no need to figure out the virtual
package name in two places, etc.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2587
2025-04-22 16:15:51 +02:00
Oliver Smith
fda8963ed7
init: fix currently checked out channel detection
In "pmbootstrap init", always use the pmaports root path when figuring
out the channel of the checked out commit (-> edge, v24.12, ...).

Otherwise the systemd path may get used, which returns channels prefixed
with "systemd-", such as "systemd-edge".

The default UI is "console", and it was recently switched to use systemd
by default. Since then the channel in pmaports CI gets detected as
"systemd-edge", which is not the same as "edge" and so pmbootstrap
switched to the master branch during "pmbootstrap init", resulting in CI
running on the wrong branch:

[10:54:44] Currently checked out branch 'HEAD' of pmaports.git is on channel 'systemd-edge'.
[10:54:44] Switching to branch 'master' on channel 'edge'...

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2586
2025-04-21 13:30:30 +02:00
Oliver Smith
6eb8cab84d
install: openrc: fix installing alpine-base early
With recent changes we don't install alpine-base in the chroots anymore.
It still gets installed as postmarketos-base depends on it (for now,
this will change soon in master). But it is not guaranteed to be
installed before other packages which may run "rc-update" in their
postinst scripts.

Fix this by explicitly installing alpine-base early on during
"pmbootstrap install".

Fix for e.g. v24.12:pine64-pinephone:phosh images:

  (342/976) Installing eg25-manager-openrc (0.4.6-r5)
  (343/976) Installing device-pine64-pinephone-openrc (7-r0)
  Executing device-pine64-pinephone-openrc-7-r0.post-install
  lib/apk/exec/device-pine64-pinephone-openrc-7-r0.post-install: line 3: rc-update: not found
  ERROR: device-pine64-pinephone-openrc-7-r0.post-install: script exited with error 127

Related: https://builds.sr.ht/~postmarketos/job/1473669#task-img-743
Fixes: 12d125ab ("chroot: don't depende on alpine-base")

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2585
2025-04-18 10:38:34 +02:00
Oliver Smith
9e8c4b2810
lint: adjust comment for empty apkbuild_paths
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2584
2025-04-15 15:57:55 +02:00
Clayton Craft
7ab40a4336
pmb.lint: Don't try to lint apkbuild paths that are empty
This fixes an issue where pmb lint tries to lint an apkbuild using a repo path that the apkbuild doesn't exist in.
For example, it fixes this:

```
[22:13:26] (native) linting postmarketos-ui-cosmic with apkbuild-lint
[22:13:26] *** apkbuild-lint output ***
Error: File APKBUILD does not exist
[22:13:26] *** apkbuild-lint output ***
[22:13:26] ERROR: Linter failed!
Traceback (most recent call last):
  File "/builds/postmarketOS/pmaports/.ci/lib/apkbuild_linting.py", line 26, in <module>
    common.run_pmbootstrap(["-q", "lint"] + packages)
  File "/builds/postmarketOS/pmaports/.ci/lib/common.py", line 52, in run_pmbootstrap
    subprocess.run(cmd, universal_newlines=True, check=True)
  File "/usr/lib/python3.12/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['pmbootstrap', '--aports', '/builds/postmarketOS/pmaports', '-q', 'lint', 'postmarketos-ui-cosmic']' returned non-zero exit status 2.
```

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2584
2025-04-15 11:51:29 +02:00
Anri Dellal
a80b27d0bd
install: Do not fail on invalid SSH key
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2576
2025-04-11 17:37:35 +02:00
Stephan Gerhold
e9038e50d6
pmb/install: Add option to create single combined boot/root partition
With recent rework in postmarketos-initramfs, we no longer need to mount
the /boot partition in the initramfs (assuming initramfs-extra is not
used). On devices that boot without accessing the boot file system (e.g.
Android boot images, fastboot, ...), that makes it possible to install
postmarketOS on a single (potentially encrypted) partition that contains
both root (/) and /boot files.

This avoids the extra complexity of the subpartition setup we usually use
on such devices, and also avoids having to flash two partitions (when using
--split to avoid the subpartitions).

Add a --single-partition option to pmbootstrap install that allows
installing postmarketOS in this mode. For now this is just an option that
must be selected explicitly, in the future we could choose to make this the
default for Android-based devices with a large enough boot partition.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2512
2025-04-11 17:35:20 +02:00
Jens Reidel
ec0163ce63
Add option to auto-select the best mirror
Signed-off-by: Jens Reidel <adrian@travitia.xyz>
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2559
2025-04-11 17:27:33 +02:00
Pablo Correa Gómez
987793bb24
core: small typing improvement 2025-04-11 17:19:10 +02:00
Pablo Correa Gómez
12d125ab8b
chroot: don't depende on alpine-base
In alpine it depends on openrc, and therefore we cannot install
systemd with it. This is necessary to get rid of the systemd-fork
and move forward with the usr-merge.

Requirement for: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6375
2025-04-11 17:19:10 +02:00
Alexey Minnekhanov
d5e4d76118
Log only if config was really changed
Print to stdout only if config option has been really changed.
If the new setting is equal to old one, be silent.

Signed-off-by: Alexey Minnekhanov <alexeymin@postmarketos.org>
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2539
2025-04-08 20:59:12 +03:00
Caleb Connolly
9d03657b80
build: package: install rsync even when package has no makedepends
When an APKBUILD has no makedepends, depends_build would be empty so we
would skip adding rsync when building with --src.

Fix this logic so we always add rsync even when there are no other
makedepends.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2581
2025-04-04 01:55:09 +02:00
fossdd
745ee74138
pmb.install._install: install locale config on default lang aswell
Reduces complexity allows applications and users to have a single source
of truth without involving /etc/profile.d/..

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2547
2025-04-03 22:58:29 +02:00
fossdd
50d2bb45f4
pmb.install._install: write lang configuration to /etc/locale.conf
Previous reasons to write the locales to /etc/profile.d/.. was because
musl-locales do only support reading from environment variables and not
/etc/locale.conf.

However systemd-localed (and glibc) uses /etc/locale.conf to read and
write locale configurations. gnome-control-center, for example, uses
localed to change locales.

In the sake of a single source of truth, allow pmb to write to
/etc/locale.conf and allow its consumers (e.g. g-c-c via systemd) to
read/change these variables.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2547
2025-04-03 22:58:29 +02:00
fossdd
9656c53a6a
pmb.install._install: remove installation of lang
lang gets moved to `_pmb_recommends` of postmarketos-base-ui to allow
switching between languages on en_US devices

Closes: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/issues/3314

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2547
2025-04-03 22:58:24 +02:00
Theresa Schönhammer
ca1f87b873
install: remove redundant package musl-locales
lang depends on musl-locales

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2579
2025-03-31 17:45:48 +02:00
Caleb Connolly
a33112c211
build: envkernel: build for the correct channel
We currently always build kernel packages for the primary channel, which
will usually be systemd-edge. This will cause sideload to fail since it
correctly only looks in the edge repo.

Update envkernel to get the proper channel name and put the kernel
there, so they will always be in the local edge repo and not the
systemd-edge one.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2572
2025-03-20 23:03:35 +01:00
Anri Dellal
15d9516c8d
pmb.flasher: fix "flasher boot" crash if cmdline is empty
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2575
2025-03-20 23:01:29 +01:00
Oliver Smith
0ab75cfe2b
build.package: makedeps warning only for c-n2
Splitting makedepends in _host and _build only makes a difference when
building with cross-native2, as these packages end up in different
chroots.

For QEMU only and crossdirect we install all makedepends into the
foreign chroot. For cross-native (v1) we install everything into the
native chroot.

Show the warning only for cross-native2 so people don't think they have
to adjust their APKBUILDs here. Most of Alpine's APKBUILDs currently
don't have this split either.

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2571
2025-03-20 22:39:11 +01:00
Oliver Smith
3dd7b5e1f3
CI: test build for x86 pkg on x86_64 machine
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2577
2025-03-20 22:36:17 +01:00
Oliver Smith
c0cdd5592d
build: fix cross-compile without CPU emulation
Fix cross compiling where CPU emulation is not needed, for example
building x86 packages on x86_64 machines.

This is the case with both:
* CrossCompile.UNNECESSARY
* arch != Arch.native()

Fix the logic in CrossCompile().build_chroot that returned the native
chroot in that case instead of Chroot.buildroot(arch).

Fix error:
  /usr/bin/abuild: line 2692: x86_64-alpine-linux-musl-strip: not found

Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2577
2025-03-20 22:36:12 +01:00
Anri Dellal
ac328581af
pmb.ci: choose multiple scripts at once interactively
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2574
2025-03-20 22:01:14 +01:00
Oliver Smith
aced51132c
CI: ruff: use 0.11.0 (Cannot use star annotation)
Ruff 0.11.1 is incorrectly printing the following types of errors:

pmb/helpers/logging.py:169:34: SyntaxError: Cannot use star annotation on Python 3.10 (syntax was added in Python 3.11)
    |
169 | def critical(msg: object, *args: str, **kwargs: Any) -> None:
    |                                  ^^^
170 |     logging.critical(msg, *args, **kwargs)
    |

But the code works fine in Python 3.10 (see pytest-python3.10 CI job).
This is a known upstream bug, pin to the previous version until it is
fixed.

Related: https://github.com/astral-sh/ruff/issues/16874
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2578
2025-03-20 21:41:02 +01:00