The variable describes the configfs function name to use, no matter if
it's rndis, ncm, ecm or any other function. So change the name of the
variable, the string we write to the configuration file and some
comments.
Instead of using the uevent helper binary, mdev daemon listens for kernel
events using the netlink interface. Then the requirement of enabling
UEVENT_HELPER for pmOS kernels can be dropped, as it's use is discouraged.
From CONFIG_UEVENT_HELPER kernel config help:
> This should not be used today, because usual systems create many events
> at bootup or device discovery in a very short time frame. One forked
> process per event can create so many processes that it creates a high
> system load, or on smaller systems it is known to create out-of-memory
> situations during bootup.
Support for running mdev as a daemon was added in 2019 with commit [1].
From that same commit:
> Adds the -d option to run mdev in daemon mode handling hotplug events
> from the kernel like udev. If the system generates many hotplug events
> this mode of operation will consume less resources than registering
> mdev as hotplug helper or using the uevent applet.
[1] https://git.busybox.net/busybox/commit/?id=498cec202adbf69a7a72af5e204260682d614183
[ci:skip-build]: already built successfully in CI
Prior to this commit, the initramfs was unable to resize the root
partition if it was on a device backed by the device mapper. This commit
fixes that now that it is possible for the root partition to lie on a
device mapper device.
Fixes 02dfe83c4b
The previous `provides="mkinifs=3.6.0"` was a requirement because alpine's
kernels had a minimum dependency in `mkinitfs>=3.6.0` to make sure that
support for compressed modules existed. That requirement is no longer
in place[1], since the dependency is now on the `initramfs-generator`
virtual package. Also, since `initramfs-generator` is a virtual package
and not a real package, versioning it might mess up APK. The documentation
explictly states that virtual packages are those with unversioned provides
and a provider_priority. So to avoid having problems in the future, let's
strictly stick to it.
[1] 4fac61c826
Alpine provides a 'initramfs-generator' thing now that the alpine
linux-* depend on explicitly. This sets postmarketos-mkinitfs to be the
preferred provider of that virtual package.
Fixes:
ERROR: unable to select packages:
postmarketos-mkinitfs-1.4.1-r5:
conflicts: mkinitfs-3.6.1-r2[mkinitfs=3.6.0]
satisfies: postmarketos-base-20-r1[postmarketos-mkinitfs]
postmarketos-base-nofde-20-r1[postmarketos-mkinitfs]
.pmbootstrap-20220610.215815[postmarketos-mkinitfs]
.pmbootstrap-20220610.215815[mkinitfs]
mkinitfs-3.6.1-r2:
conflicts: postmarketos-mkinitfs-1.4.1-r5
satisfies: .pmbootstrap-20220610.215815[mkinitfs]
linux-rpi-5.15.45-r1[initramfs-generator]
.pmbootstrap-20220610.215815:
masked in: cache
satisfies: world[.pmbootstrap=20220610.215815]
Also see:
30d7b88324 (aports) main/mkinitfs: provide initramfs-generator
4fac61c826 (aports) main/linux-lts: replace mkinitfs with initramfs-generator
At the moment, mkinitfs loads some file system modules always (ext4),
some dynamically (brtfs) and some not at all (f2fs, vfat), expecting
them to be built-in.
To support generic kernels (e.g. from Alpine) properly, use the
partition type detection for both boot and root partition and always
load the necessary modules before mounting.
An increasing number of devices relies on the vfat file system in the
initfs (e.g. for UEFI boot). Having to add all the modules required for
it to work to deviceinfo_modules_initfs is annoying and inconsistent,
in particular for the additionally chosen "nls" modules. Since we
already bundle several file systems by default, let's just add vfat
as well to simplify this.
Ideally mkinitfs should detect the file systems chosen at install time
in the future and only include the necessary modules, but until then
this just adds a couple of kilobytes to the initramfs.
This replaces the previous `udevadm test` hack with a combination of
`udevd`, `udevadm trigger` and `udevadm settle` in order to coldplug all
available devices and make them available for use via libinput / unl0kr.
Relates to: #1411
[ci:skip-build] already built successfully in CI
unudhcpd is a lightweight dhcp server that effectively implements static
assignment of a single IP on an interface regardless of client MAC, with
no lease. The end result is that a system connected to a pmOS device via
usb networking should always get an IP, and always get one very quickly.
This adds a new dependency on this dhcp server, and starts it in initfs.
Fixes#1199
[ci:skip-build] already built successfully in CI
This reverts 5fa1755fba. Bundling
/sbin/modprobe is no longer necessary because Alpine switched back to gz
for LTS kernels with [1].
Relates: !2693
Relates: #1294
[1]: 12243ca822
This adds two new subpackages postmarketos-mkinitfs-modprobe-lts and
postmarketos-mkinitfs-modprobe-edge that include /sbin/modprobe in the
initfs when one of the Alpine kernels (linux-lts or linux-edge) are also
installed.
Fixes: #1294
[ci:skip-build] already built successfully in CI
Alpine patches busybox to support image alignment in [1].
So far we don't need to align the spalshes in postmarketOS as those are
generated per device. However with generic images it becomes impossible
to support multiple resolutions with this approach.
Set the alignment to "Center" in fbsplash config so generic system
images can reuse the splash on multiple resolutions.
[1] - https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/main/busybox/0008-fbsplash-support-image-and-bar-alignment-and-positio.patch
[ci:skip-build] already built successfully in CI
Support for custom "Loading..." splashes was added in MR 1776, but
`unlock_root_partition` function is still hardcoding default "Loading..."
splash. Fix this behaviour by replacing usage of `show_splash` function with
`show_splash_loading`, which accounts for presence of custom splash.
Closes#759
* xts, libaes & aes are required for root partition FDE unlocking
* evdev is required by osk-sdl for input
[ci:skip-build] already built successfully in CI
Adjust post-upgrade script to not remove vmlinuz-*. This causes problems
with devices using kernels from Alpine, where the kernel is not
installed to /boot/vmlinuz, as it is now the case in postmarketOS, but
e.g. in /boot/vmlinuz-rpi. The intention was to clean up files when
migrating from the old postmarketos-mkinitfs to the new one (>= 1.0.0).
However, the /boot/vmlinuz* files are managed by apk, so they should
already get removed.
Add -v, so it prints a message when removing a file from /boot.
This replaces the mkinitfs script with a re-write (in Go). The
re-written mkinitfs will atomically replace the initfs in /boot, check
for free space before doing so, and try to do whatever it can to not
leave the system in an unbootable state by botching the initfs
creation/installation.
pmb:cross-native with go cross compiling doesn't work exactly, it makes
the correct binary, but on Alpine go uses -buildmode=pie which creates a
dynamic thing, and the interpreter is wrong (e.g. it it set to use the
host arch's interpreter, like /lib/ld-musl-x86_64 even though
GOARCH=arm64)
The init.sh script is no longer a template, "initramfs-extra" is used.
Fixes https://gitlab.com/postmarketOS/pmaports/-/issues/1019
fixes https://gitlab.com/postmarketOS/pmaports/-/issues/660
This fix was pending since before charging-sdl was deprecated and still
provides value should anyone wish to pickup and improve charging-sdl
again.
charging-sdl currently does not check for devices using mesa, even
though it supports it in the same way as osk-sdl. Check for msa support
and set SDL_VIDEODRIVER in that case.
Also fix the font path, as it was reading both keyboard-font and
keyboard-font-size from osk.conf.
Previously it was assumed that with the counter and the sleep 0.1 the
process would take about 10 seconds to complete. On newer devices with
tens or even hundreds of partitions going through all partitions already
takes a significant amount of time, so change the logic to measure the
time elapsed instead.
The flavor string was naively parsed using sed by removing everything
before the first hyphen, this breaks for -rc kernels. Instead lets glob
/usr/share/kernel for the installed kernel flavor. This will also
prevent the kernel being flashed if the running kernel has a different
localversion than the updated one.
[ci:skip-build] already built successfully in CI
This replaces the dependency on osk-sdl with a dependency on a
postmarketos-fde-unlocker virt. package
osk-sdl and its dependencies are also added contitionally to the initfs,
based on whether the osk-sdl exe is installed in the rootfs
Also see:
https://gitlab.com/postmarketOS/pmbootstrap/-/merge_requests/2066
Shellcheck 0.7.2 has a change that gives many error conditions their own
SC30** codes, instead of including them in SC2039. This updates the
scripts in this package that "disable SC2039" to disable the new code.
New codes added in shellcheck: cfd68ee0c2ebfd0ab08a1d4bf628162b454dc207
On Android devices that support kernel updates (marked by the deviceinfo
variable "deviceinfo_flash_kernel_on_update") lets flash the kernel and
initramfs automatically!
On my librem 5 when using directfb in initfs, touch input is really
inconsistent... the cursor seems to jump around and it's hard to enter
keys in osk-sdl. This is completely 'fixed' by disabling the ps2mouse
input module in dfb.
I guess this might cause mice to stop working (?), but I can't think of
any situation where someone would run osk-sdl in initfs on a device that
has a ps2 mouse but no keyboard (which would make more sense to use for
entry than the mouse..)
uboot-tools is provided by u-boot-tools but sometimes apk still gets
confused. This change prevents errors such as
pine64-pinephone:~$ sudo apk upgrade --verbose
WARNING: Failed to perform initial self-upgrade, continuing with full upgrade.
ERROR: unable to select packages:
uboot-tools (virtual):
provided by: u-boot-tools
required by: device-pine64-pinephone-0.25-r1[uboot-tools]
[ci:ignore-count]
[ci:skip-build]: already built in CI successfully