Commit graph

470 commits

Author SHA1 Message Date
Caleb Connolly
d9e1da98b2
more n more (MR 2252)
Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
de4c912692
WIP: 2024-06-05: args hacking and more (MR 2252)
Continue removing args and do some other optimisations.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
48cd886401
more wip (MR 2252)
Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
34dd9d42ba
WIP: start ripping out args (MR 2252)
Cease merging pmbootstrap.cfg into args, implement a Context type to let
us pull globals out of thin air (as an intermediate workaround) and rip
args out of a lot of the codebase.

This is just a first pass, after this we can split all the state that
leaked over into Context into types with narrower scopes (like a
BuildContext(), etc).

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
bfea00e03a
config: pmaports: drop legacy checks (MR 2252)
It's been 6(?) years since pmaports moved out of the pmbootstrap repo.
Let's finally drop these checks.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
0a0cba51e1
helpers: ui: rename list() to list_ui() (MR 2252)
list is a reserved keyword...

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
1be8653935
drop args from helpers.git and chroot.apk (MR 2252)
be gone!

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:38 +02:00
Caleb Connolly
05c86be11c
helpers: drop args from helpers.run functions (MR 2252)
Now we can run commands without needs args available!

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00
Caleb Connolly
02f04ba3a8
core: move args.log to context.log (MR 2252)
Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00
Caleb Connolly
838beb270d
config: combine save and load (MR 2252)
These are both pretty related, put them in the same file.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00
Caleb Connolly
31cc898dd5
treewide: adopt pathlib.Path and type hinting (MR 2252)
With the new chroot type, we can now write fancy paths in the pythonic
way. Convert most of the codebase over, as well as adding various other
type hints.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00
Caleb Connolly
71e7af57e6
pmb.helpers.logging: wrap logging module (MR 2252)
We use a custom verbose log level in pmbootstrap, unfortunately it isn't
possible to correctly type this due to some limitations in the logging
library [1], [2].

Given that our usecase is fairly simple, we can just wrap the module
with our own so we only have to tell mypy to ignore the error once
instead of at every callsite.

[1]: https://github.com/cryptax/droidlysis/issues/15
[2]: https://github.com/python/typing/discussions/980

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00
Caleb Connolly
7ed08e74d3
pmb.helpers.other.cache: simplify (MR 2252)
The init_cache() function just assigned some default constants, simplify
this by just declaring it that way to begin with, as well as adding type
hints.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00
Caleb Connolly
198f302a36
treewide: add a Chroot type and adopt pathlib.Path (MR 2252)
Introduce a new module: pmb.core to contain explicitly typed pmbootstrap
API. The first component being Suffix and SuffixType. This explicitly
defines what suffixes are possible, future changes should aim to further
constrain this API (e.g. by validating against available device
codenames or architectures for buildroot suffixes).

Additionally, migrate the entire codebase over to using pathlib.Path.
This is a relatively new part of the Python standard library that uses a
more object oriented model for path handling. It also uses strong type
hinting and has other features that make it much cleaner and easier to
work with than pure f-strings. The Chroot class overloads the "/"
operator the same way the Path object does, allowing one to write paths
relative to a given chroot as:

builddir = chroot / "home/pmos/build"

The Chroot class also has a string representation ("native", or
"rootfs_valve-jupiter"), and a .path property for directly accessing the
absolute path (as a Path object).

The general idea here is to encapsulate common patterns into type hinted
code, and gradually reduce the amount of assumptions made around the
codebase so that future changes are easier to implement.

As the chroot suffixes are now part of the Chroot class, we also
implement validation for them, this encodes the rules on suffix naming
and will cause a runtime exception if a suffix doesn't follow the rules.
2024-06-23 12:38:37 +02:00
Caleb Connolly
a76cd92bcb
pmb.config: support ssh urls for (pm)aports (MR 2252)
HTTP auth is heavily discouraged, and becoming annoying to set up and
use. Let folks reconfigure pmaports origin remote using the SSH URL.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:36 +02:00
Clayton Craft
3eca24f1ed
kconfigcheck: add NLS_ASCII for efi check (MR 2310)
This option is required for kernels to support mounting the ESP as /boot
after pmaports bb6d7a05b
2024-05-19 19:20:22 +02:00
Oliver Smith
fd73ecbfd3
pmb.config.apk_tools_min_version: add v3.20
Prepare for postmarketOS v24.06.
2024-05-15 20:54:16 +02:00
Oliver Smith
e64583458c
pmb.config.apk_tools_min_version: update
Set the current apk versions as min version.
2024-05-15 20:54:11 +02:00
Newbyte
0df75422b4
treewide: Rename unmaintained to archived (MR 2308)
See https://gitlab.com/postmarketOS/pmaports/-/merge_requests/5046
2024-05-15 17:06:37 +02:00
Robert Eckelmann
044d3b5a6a
pmb.*: various comment reformatting to assist with generating docs (MR 2266) 2024-05-14 14:36:22 +02:00
Clayton Craft
70a5e6ebf7
pmb.config: kconfig check: turn off RT_GROUP_SCHED in 'community' (MR 2305)
See: https://gitlab.com/postmarketOS/pmaports/-/issues/2652
2024-05-06 10:21:41 -07:00
Clayton Craft
888026e95d
pmb.config.apkbuild_attributes: add sha512sums (MR 2296)
Useful for pmaports CI, see:
https://gitlab.com/postmarketOS/pmaports/-/merge_requests/4994#note_1842433422
2024-04-16 19:09:40 +00:00
Oliver Smith
0d320d0613
pmbootstrap status: rework (MR 2294)
Reimplement "pmbootstrap status" to be just a simple and useful status
overview. The previous version ran a bunch of checks every time, and
would fail on these even if pmaports was used for normal development:
  * "non-official" branch checked out in pmaports
  * pmaports.git is not clean

The information about aports.git was also considered not so useful upon
revisiting this command, since it is only used for "pmbootstrap
aportgen". Most users don't need this, and if the user runs this
command, it will tell if aports.git is outdated.

All of the above made the previous version unpleasant to use and I
suspect most people stopped using the command after trying it out a few
times and seeing the irrelevant but loud NOK complaints.

New version:

  $ pmbootstrap status
  Channel: edge (pmaports: master_staging_systemd)
  Device:  qemu-amd64 (x86_64, kernel: virt)
  UI:      console
  systemd: no (default for selected UI)

Old version (without --details it only shows NOK checks):

  $ pmbootstrap status --details
  [00:55:20] *** CONFIG ***
  [00:55:20] Device: qemu-amd64 (x86_64, "QEMU amd64")
  [00:55:20] Kernel: virt
  [00:55:20] User Interface: console
  [00:55:20]
  [00:55:20] *** GIT REPOS ***
  [00:55:20] Path: /home/user/.local/var/pmbootstrap/cache_git
  [00:55:20] - aports_upstream (master)
  [00:55:20] - pmaports (master)
  [00:55:20]
  [00:55:20] *** CHECKS ***
  [00:55:20] [OK ] Chroots zapped recently (or non-existing)
  [00:55:20] [OK ] aports_upstream: on official channel branch
  [00:55:20] [OK ] aports_upstream: workdir is clean
  [00:55:20] [OK ] aports_upstream: tracking proper remote branch 'origin/master'
  [00:55:20] [OK ] aports_upstream: up to date with remote branch
  [00:55:20] [OK ] aports_upstream: remote information updated recently (via git fetch/pull)
  [00:55:20] [OK ] pmaports: on official channel branch
  [00:55:20] [OK ] pmaports: workdir is clean
  [00:55:20] [OK ] pmaports: tracking proper remote branch 'origin/master'
  [00:55:20] [OK ] pmaports: up to date with remote branch
  [00:55:20] [OK ] pmaports: remote information updated recently (via git fetch/pull)
  [00:55:20]
  [00:55:20] NOTE: chroot is still active (use 'pmbootstrap shutdown' as necessary)
  [00:55:20] DONE!
2024-04-16 18:54:35 +00:00
Oliver Smith
8bafa93bb2
pmbootstrap init: remove text about daily zapping (MR 2293)
Now that pmbootstrap displays a warning on stale chroots, we don't need
to show this at the end of "pmbootstrap init".
2024-04-11 21:50:35 +00:00
Oliver Smith
ed8e7c1f85
pmb.chroot.init: warn about outdated chroots (MR 2293)
Prepare to remove the outdated chroot check from "pmbootstrap status".
Display it when the user enters a stale chroot instead. This way the
user is more likely to see it, and we can make "pmbootstrap status" more
minimal (by removing all checks, in future patches).

Related: issue 1903
2024-04-11 21:50:30 +00:00
Raymond Hackley
89117277d0
pmb.config: kconfig check: add USB mass storage devices to community (MR 2281)
Add USB mass storage devices to community, which is required for
USB booting.
2024-03-20 10:06:38 -07:00
Oliver Smith
4478116379
Add sanity check for "systemd" config values (MR 2273)
Make sure users don't set systemd to "true" or other not allowed values
(allowed are "always", "default", "never").

Check for it:
* after loading the config
* when using 'pmbootstrap config systemd <newvalue>'
2024-03-12 23:53:47 +00:00
Oliver Smith
de5e4c6962
is_systemd_selected: check for branch support (MR 2273)
Don't attempt to install postmarketos-base-systemd if the current branch
doesn't have a systemd section in pmaports.cfg.
2024-03-12 23:53:47 +00:00
Oliver Smith
bfc64d1cb8
Support pmb:systemd-never option (MR 2273)
For UI packages that have pmb:systemd-never set:
* do not ask in "pmbootstrap init" whether to use systemd or not
* do not install systemd, even if the systemd option is set to "always"

The point of this is to not add maintenance burden to Sxmo (and possibly
other UIs who not wish to support systemd with postmarketOS), so users
don't install with this unsupported use case and report issues with it.
2024-03-12 23:53:47 +00:00
Oliver Smith
6f3ed45d49
systemd installs: merge /usr on chroot init (MR 2273) 2024-03-12 23:53:47 +00:00
Oliver Smith
e96ca36376
init: ask whether to install systemd (MR 2273)
Add the following question to "pmbootstrap init":

[22:12:57] Based on your UI selection, 'default' will result in installing systemd.
[22:12:57] Install systemd? (default/always/never) [default]:

Determine whether the UI prefers to have systemd or not, based on
"pmb:systemd" in the UI package's APKBUILD.

Determine whether the currently selected branch supports systemd, by
checking for a "[repo:systemd]" section in pmaports.cfg. This section
will also contain bootstrap information, to be used in future patches.
2024-03-12 23:53:42 +00:00
Clayton Craft
a416e3ffae
pmb.config: kconfig check: add vfat to uefi check (MR 2269)
UEFI 2.0 spec requires FAT for the ESP[1], and we use the ESP for /boot so
let's make sure that the kernel always has support for mounting it.

1. https://uefi.org/specs/UEFI/2.10/13_Protocols_Media_Access.html#file-system-format-1
2024-03-08 16:31:25 -08:00
Clayton Craft
1352c658a5
pmb.config: kconfig check: mark some EFI config as specific to ARM (MR 2269)
This fixes an issue where the kconfig uefi check fails on x86_64
kernels, since these vars do not exist in the kconfig for this arch.
2024-03-08 16:31:20 -08:00
Raymond Hackley
e0d5b49840
pmb/config: s/für/for/
Fix typo

Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20240226104630.5819-1-raymondhackley%40protonmail.com%3E
Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-02-26 14:50:19 +00:00
Clayton Craft
aa594b76fa
pmb.config: do not prompt for nonfree fw/userland (MR 2255)
This drops the prompt for using non-free firmware in images. The logic
for searching/installing non-free fw subpackages for devices is kept,
and will always be installed. This is to support the many device
packages in pmaports that still have nonfree-firmware subpackages. Going
forward, device packages can list firmware in `depends=` (for required
fw) or `pmb_recommends` (for optional fw).

nonfree-userland wasn't used in pmaports as far as I could find.
2024-02-15 16:00:56 -08:00
Pablo Correa Gómez
f893cd3081
config: add note on why mirrors are http and not https (MR 2256)
It has been a confusion point in the past:

https://gitlab.com/postmarketOS/pmbootstrap/-/merge_requests/2128

https://gitlab.com/postmarketOS/pmbootstrap/-/merge_requests/2094
2024-02-15 20:02:51 +00:00
Pablo Correa Gómez
57701084de
config: organize defaults matching config_keys and order alphabetically (MR 2256)
Makes it much easier to read
2024-02-15 20:02:39 +00:00
Andras Sebok
0c8b9c805f
pmb.aportgen: drop deviceinfo_screen_* (MR 2253) 2024-02-09 20:13:59 +01:00
Luca Weiss
54a616621f
kconfig check: Enable more options for community (MR 2245)
Enable some configs that were collected over the last year(s) and enable
them for the community kconfig check.
2024-02-06 19:02:34 +00:00
jane400
178486a64e
kconfig check: enable NFT_COMPAT for iptables-nft wrapper (MR 2245)
we're not in the nftables only world yet, things like docker and
tailscale only work with the `iptables` command. those programs
expect iptable-modules, which we make available to nftables over
the nftables/iptables compat layer.
2024-02-06 19:02:30 +00:00
Andras Sebok
e0e3e213ba
flasher: heimdall-bootimg: add support for '--no-reboot' and '--resume'
Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C170534361606.26168.17672643433174186875-0@git.sr.ht%3E
2024-01-16 21:16:07 +00:00
Luca Weiss
abad57e232
pmb.config: add new newapkbuild arguments
Add support for passing through the correct argument for Python
(gpep517) and Rust to newapkbuild.

Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20240108222736.1143841-1-luca@z3ntu.xyz%3E
2024-01-09 16:55:47 +01:00
Clayton Craft
19f8a3b8c8
pmb.install: support pmb_recommends for any package
This refactors the get_recommends function that was originally used for
UI packages to support pmb_recommends for any package (and subpackage).

Extending pmb_recommends will, for example, help us create better
generic device packages [1] and can be used to improve packaging for UIs
with shared pmb_recommends[2].

1. https://gitlab.com/postmarketOS/pmaports/-/merge_requests/4673
2. https://gitlab.com/postmarketOS/pmaports/-/merge_requests/3700

Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20240102074605.23248-2-clayton@craftyguy.net%3E
2024-01-09 16:55:47 +01:00
Oliver Smith
d7f9769ee0
aportgen: remove binutils
Remove the code for generating binutils-aarch64 etc. packages, as these
live upstream in Alpine now. Having the generator scripts for binutils
cross pkgs is therefore not useful anymore and would just bitrot if we
kept it.

Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20231126121617.3855-1-ollieparanoid@postmarketos.org%3E
2023-12-03 20:11:31 +01:00
Oliver Smith
1e3c9fc117
pmb.config.apk_tools_min_version: add alpine 3.19
Prepare for v23.12 release.
2023-11-28 20:42:33 +01:00
Clayton Craft
c0937a52dc
config.init: allow using pmb_select in pmos-base-ui
Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20231122081214.11872-3-clayton@craftyguy.net%3E
2023-11-26 11:01:35 +01:00
Ben Westover
c25425b97d
config: Fix typo in valid aport options
Setting !pmb:kconfigcheck prevents kconfig check from failing in CI.
This causes the lint job to fail, however, because there is a typo in
pmbootstrap's list of valid options for aports.

Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20231119200807.84775-1-me@benthetechguy.net%3E
2023-11-19 21:15:22 +01:00
Clayton Craft
6b7a499b9a
pmb.config: add RFKILL to iwd kconfig check
This module is required by iwd

Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20231105185108.1518-1-clayton@craftyguy.net%3E
2023-11-13 09:30:30 +01:00
Ben Westover
c10a3ce73b
parse.bootimg: Separate kernel and ramdisk MediaTek headers
Currently, pmbootstrap checks if either the kernel or the ramdisk in a boot.img
contains the MediaTek header, and if one does, it assumes both do. It hardcodes
the label KERNEL for the kernel and ROOTFS for the ramdisk.

My Amazon Echo Dot (gen 2) has a boot.img where only the kernel has the header,
but not the ramdisk. These changes (as well as those in my new boot-deploy MR)
account for that situation (and any possible label an image has) by splitting
bootimg_mtk_mkimage into two variables for the kernel and the ramdisk labels.

Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/patches/46351
2023-11-13 09:30:24 +01:00
Luca Weiss
5dcd8465ed
kconfig check: enable USB_CONFIGFS_NCM for USB gadgets
See also:
* https://gitlab.com/postmarketOS/pmaports/-/issues/1797
* https://gitlab.com/postmarketOS/pmaports/-/merge_requests/3670
* https://gitlab.com/postmarketOS/pmaports/-/merge_requests/4511

Reviewed-by: Clayton Craft <clayton@craftyguy.net>
Reviewed-by: Oliver Smith <ollieparanoid@postmarketos.org>
Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20231028084918.33496-1-luca@z3ntu.xyz%3E
2023-11-01 20:42:34 +01:00